テストプログラムは
#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
は、「b」とは異なり、オブジェクト「a」が代入演算子を実行せずに「直接」A(1)から構築されたことを示しています。しかし、コピーコンストラクターも実行されませんでした。なんで?この場合、代入演算子を強制的に実行する方法はありますか?私が書いたらそのような行動を期待したでしょう
A a (1);
でも私はしたい
A a = A(1);
これは最初のケースとは異なる必要があります。か否か?
(実際、問題は、Aから派生したクラスBがあり、Aの代入演算子にA a = B(...)のような宣言を処理させたい場合に発生します。)