beloコードスニペットについて考えてみましょう。
class Base
{
public:
Base()
{
cout<<"Constructor"<<endl;
}
Base(const Base& rhs)
{
cout<<"Copy constructor"<<endl;
}
Base* Clone()
{
return new Base(*this); <--------------- 2
}
void* operator new(size_t size)
{
void* p=malloc(size);
cout<<"Inside new"<<endl;
return p;
}
};
int main()
{
Base b1; <------------ 1
Base* ptr=b1.Clone();
return 0;
}
私は次のように出力を取得しています:
Constructor
Inside new
Copy constructor
最初の演算子newがvoid型のチャンクを割り当て、次にnew演算子がコンストラクターを呼び出して、そのチャンクをLHSのチャンクとまったく同じ型に変換することを聞き続けました。
では、なぜコンストラクターがステートメント2に対して呼び出されないのでしょうか。
また、ステートメント2に対してC++コンパイラーによって実行される一連の正確なアクションについても知りたいと思います。