ОК, я читаю «эффективный C++», а пункт 12 говорит, пожалуйста, не вызывайте назначение копии в конструкторе копирования. Но после того, как я попытаюсь это сделать, он работает. Поэтому я хочу спросить, почему, я не могу повторно использовать код назначения копии в конструкторе копирования?C++: вызов копирования в конструкторе копирования
ответ
Предположим, что вы используете оператор присваивания копий в copy-constructor. Тогда вы теряете способность осуществлять copy-and-swap идиомы для оператора присваивания:
struct A
{
A (const A &a)
{
*this = a; // Assignment to a not yet constructed object is not well
}
A &operator=(A a) // Pass by value
{
// ...
}
};
A a1, a2;
a1 = a2; // Infinite recursion!
это не представляется возможным, и бесконечная рекурсия будет происходить.
Спасибо, я думаю, что это полезно. Это приведет к бесконечной рекурсии, если аргумент передается по значению, и нецелесообразно назначать не сконструированный объект. Извините, у меня недостаточно репутации для голосования. – lingjieyu
Конструктор создает новый объект; оператор присваивания модифицирует существующий объект. Вы не можете использовать оператор присваивания для создания нового объекта: он не знает, как это сделать, даже если он работает в простых случаях.
- 1. C++ конструктор копирования вызов
- 2. вопрос о конструкторе копирования
- 3. C++ Использование const в конструкторе копирования?
- 4. Указатели аргументов в конструкторе копирования
- 5. Предотвращение нарезки в конструкторе копирования
- 6. Последствия const_cast в конструкторе копирования?
- 7. Утечка памяти в конструкторе копирования
- 8. Знание о конструкторе копирования в java
- 9. В чем смысл эллипсов в конструкторе копирования?
- 10. Дополнительный деструктор в конструкторе, конструктор копирования, последовательность деструктора в C++
- 11. неявного вызов конструктора копирования
- 12. Вызов неоконченного конструктора копирования
- 13. Нет вызов конструктора копирования
- 14. Как установить Deep copy в конструкторе копирования?
- 15. Метод вызова ссылки const в конструкторе копирования
- 16. Назначение класса для копирования объекта в конструкторе
- 17. Перемещение указателя функции в конструкторе копирования
- 18. Назначить весь объект в конструкторе копирования?
- 19. const и не const в конструкторе копирования?
- 20. Копирование вектора векторов в конструкторе копирования
- 21. Динамически выделять память, ошибка в конструкторе копирования
- 22. Избегайте копирования сложных данных в конструкторе классов
- 23. системный вызов для копирования файлов
- 24. Автоматизация конструктора копирования в C#
- 25. о конструкторе копирования и перегруженном операторе присваивания
- 26. Конструкторы копирования в C++
- 27. Конструктор копирования в C++
- 28. Вопрос программирования C++ OOP на конструкторе копирования? Наследование
- 29. Вызов конструктор копирования на себя
- 30. Понимание конструктора копирования в C++
Я думаю, что это потому, что, вероятно, более эффективная инициализация членов путем их непосредственного копирования в списке инициализаторов. –
У меня такое чувство, которое хорошо объяснено в пункте 12 «Эффективный C++». – juanchopanza
Надеюсь, что все ответы будут объяснять более или менее то же самое, что объяснил Скотт там в _Item 12_ – P0W