Самоинициализация '= a'; позволенный?

Вы можете использовать CLI artisan в Lumen так же, как в Laravel, но с меньшим количеством встроенных команд. Чтобы увидеть все встроенные команды, используйте команду php artisan в Lumen.

Хотя в Lumen нет команды make:command, вы можете создать свою собственную команду:

  • Добавить новый класс команд в папку app/Console/Commands, вы можете использовать образец класса шаблон фреймворка serve команда

  • Зарегистрируйте свою пользовательскую команду, добавив созданный класс к члену $commands в файле app/Console/Kernel.php.

Кроме генерации команд, вы можете использовать документы Laravel для команд при работе с Lumen.

7
задан Bo Persson 23 August 2011 в 21:53
поделиться

4 ответа

Ваш код вызывает не стандартный конструктор, а конструктор копирования, поэтому вы обращаетесь к неинициализированному указателю.

8
ответ дан 6 December 2019 в 12:53
поделиться

Интересное чтение о самостоятельном назначении: http://www.gotw.ca/gotw/011.htm

В частности, обратите внимание на «Постскриптум №1» в отношении этот вопрос и некоторые из полученных ответов.

4
ответ дан 6 December 2019 в 12:53
поделиться

В соответствии со стандартом (12.6.1 [class.expl.init]) самоинициализация совершенно законна.

Следовательно, следующее допустимо.

A a = a;

Вы просто необходимо написать свой конструктор копирования, чтобы работать с ним правильно.

A(const A& rv)
{
    if(&rv == this) {
        p = new int(0);
        return;
    }

    p = new int(*rv.p);
}

Изменить: обновлен код на основе комментариев.

3
ответ дан 6 December 2019 в 12:53
поделиться

A a = a; определенно не надо писать. Но можно было бы записать a = a . Ваш оператор присваивания должен проверять & rv == this и ничего не делать в случае самокопирования.

О, да, вам действительно нужно написать оператор присваивания для класса A.

1
ответ дан 6 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: