2

コードをより適切に整理する方法を見つけようとしているので、問題を表す簡単な例を作成しました。

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 を回避する方法はありますか?

4

0 に答える 0