コードをより適切に整理する方法を見つけようとしているので、問題を表す簡単な例を作成しました。
ClassA と ClassB の場合:
class ClassA
{
public:
ClassA() { cout << "ClassA ctor\n"; }
ClassA(const ClassA &other) { cout << "ClassA copy ctor\n"; }
ClassA& operator=(ClassA other) {
cout << "ClassA assignment\n";
return *this;
}
~ClassA() { cout << "ClassA destructor\n"; }
};
class ClassB {
ClassA mA;
public:
ClassB(ClassA a) : mA(a) {
cout << "ClassB ctor\n";
}
~ClassB() { cout << "ClassB destructor\n"; }
};
このコードが機能する理由があるかどうか誰かが説明できますか:
void test3(ClassA pA) { cout << "Test3\n"; }
...
test3(ClassA());
出力の生成:
ClassA アクター
テスト3
ClassA デストラクタ
このコードはしませんが:
ClassB b(ClassA());
この場合、ClassB コンストラクターは実行されません (ただし、エラーはスローされません)。
ctor に引数を値で渡すときにコピー ctor を回避する方法はありますか?