Тестовая программа
#include <iostream>
using namespace std;
class A
{public:
A (): I(0) {cout << "default construcot" << endl; };
explicit A (int i): I(i) {cout << "another construcot" << endl; };
A (const A& a): I(a.I) {cout << "copy constructor" << endl; }
A& operator = (const A& a)
{cout << "assignment operator" << endl;
if (this == &a) return *this;
I = a.I;
return *this;
}
void show () {cout << I << endl; };
private:
int I;
};
int main ()
{A a = A(1);
A b;
b = A(2);
a.show();
b.show();
return 0;
}
выход
another construcot
default construcot
another construcot
assignment operator
1
2
показывает, что объект «a» в отличие от «b» был построен из A (1) «напрямую» без выполнения оператора присваивания. Но конструктор копирования тоже не был выполнен. Зачем? Есть ли способ форсировать выполнение оператора присваивания в этом случае? Я бы ожидал такого поведения, если бы написал
A a (1);
но я хочу
A a = A(1);
, которые должны отличаться от первого случая. Или нет?
(На самом деле проблема возникает, когда у меня есть класс B, производный от A, и я хочу, чтобы оператор присваивания A обрабатывал объявление, например, A a = B (...).)