Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Visual C++ / MFC / WTL > конструктор копирования


Автор: Cfon 03.04.17, 05:59
Здравствуйте, по ходу написания моего знаменитого демо возник такой вопрос :D
есть к примеру класс:
<{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 то компилируется :huh:
естесвено если определить в первом случае копировщик то все компилируется
<{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 его нет, поэтому и у А он тоже не генерируется.

да затупил в очередной раз :D
щас глянул сорсы CArray в нем вроде все норм, а вот в CObject от которого он наследован, копировщик закрыт :yes:

Добавлено
на самом деле я не сразу понял в чем дело, я думал что нет копировщика в классе А, ну т.е. типо надо его явно определить, что вроде как не обязательно если его нет то компилятор сам генерит, из этого весь сыр-бор :D

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)