LINUX.ORG.RU

operator=


0

0

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

и есть

class B {
...
A a;
...
};

и в B не определены оператор копирования и конструктор копии.

И что согласно стандарту произойдет при

B b1, b2;

b2=b1;

будет ли вызван оператор копирования a?

anonymous

С вероятностью 99.99% произойдет вызов b2.a.operator=(b1.a), ибо ничего другого произойти не может.

phoenix ★★★★
()
Ответ на: комментарий от phoenix

>С вероятностью 99.99% произойдет вызов b2.a.operator=(b1.a), ибо ничего >другого произойти не может.

может пройзойти просто побитовое копирование

anonymous
()

Дело в том, что оператор =, конструктор по умалчанию и конструктор копирования __ВСЕГДА__ создаются компилятором (если вы не хотите чтобы они создавались, вам надо перенисти их прототипы в раздел private и не реализовывать их тела). По умалчанию, оператор = вызывает операторы = полей класса.

the_coder ★★
()
Ответ на: комментарий от phoenix

ISO 14882 говорит

The implicitly-defined copy assignment operator for class X performs
memberwise assignment of its subobjects. The direct base classes of X
are assigned first, in the order of their declaration in the 
case-specifier list, and then the immediate nonstatic data memers of X 
are assigned, in the order in wich they were defined in the class 
definition. Each subobject is assigned in the manner appropriate to its 
type:

- if the subobject is of class type, the copy assignment operator is 
used (as if by explicit qualification; that is, ignoring any possible 
virtual overriding functions in more derived classes);
...

Так как в "b2 = b1" оператор как раз implicitly-defined, то для b2.a 
будет вызван имено оператор копирования.

grob ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.