Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Visual C++ / MFC / WTL > конструктор копирования |
Автор: Cfon 03.04.17, 05:59 |
Здравствуйте, по ходу написания моего знаменитого демо возник такой вопрос есть к примеру класс: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> class A { public: A() {} ~A() {} CArray<int> array; }; так вот след код не компилируется <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> A a; A b = a; //<-- ругается типо нет копировщика пишет что: "error C2280: 'A::A(const A &)': attempting to reference a deleted function" а вот если заменить например на std::vector то компилируется естесвено если определить в первом случае копировщик то все компилируется <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> class A { public: A() {} A(const A& a) {} ~A() {} CArray<int> array; }; |
Автор: OpenGL 03.04.17, 06:05 |
Дефолтовый конструктор копирования просто пытается вызвать конструкторы копирования всех членов класса. У CArray его нет, поэтому и у А он тоже не генерируется. |
Автор: Cfon 03.04.17, 06:10 |
Цитата OpenGL @ Дефолтовый конструктор копирования просто пытается вызвать конструкторы копирования всех членов класса. У CArray его нет, поэтому и у А он тоже не генерируется. да затупил в очередной раз щас глянул сорсы CArray в нем вроде все норм, а вот в CObject от которого он наследован, копировщик закрыт Добавлено на самом деле я не сразу понял в чем дело, я думал что нет копировщика в классе А, ну т.е. типо надо его явно определить, что вроде как не обязательно если его нет то компилятор сам генерит, из этого весь сыр-бор |