質問: MyClass(3);//this is the important line printf("after &myClassVar : %p\n", &myClassVar); } private: MyClass myClassVar; }; int main() { ClientClass c; c.Foo(); return 0; } ``` --- ``` MyClass 0x7fff5fbfeba0 before &myClassVar : 0x7fff5fbfeba0 Myclass(int) 0x7fff5fbfeb70 ~MyClass 0x7fff5fbfeb70//<--- here destructor is called on the newly created object after &myClassVar : 0x7fff5fbfeba0 ~MyClass 0x7fff5fbfeba0 ```
回答: 他の投稿と同様に、カスタムコンストラクタ `MyClass(3)`を持つオブジェクトは、割り当て操作 `myClassVar = MyClass(3)`の後で破棄されます。この場合、カスタム代入演算子は必要ありません。これは、コンパイラーがメンバーmyClassVarに **mA** というメンバーをコピーしたためです。 しかし、MyClassは独自のデストラクタを定義しているので、 3つのルールのように、カスタム代入演算子も実装する必要があります。