stackoverflow のチャット エリアで次の質問をしました。
このようにオブジェクトを作成すると、一時オブジェクトが作成され、代入演算子が呼び出されて一時オブジェクトが obj オブジェクトに割り当てられますか?
Object obj = Object( "Chris", 27 );
コンストラクターを呼び出すだけだと言われました。
ただし、コードを実行すると、次の行で dtor が呼び出されたことがコンソールに出力されます。これは、一時的なものが構築されたことを意味し、代入演算子が正しく呼び出されていることを意味するに違いありません。
それが本当なら、それはコンストラクタをこのように書くことを意味しますか
Object obj( "Chris", 22 );
一時的なctorとdtor、および代入演算子を回避しているため、実際にははるかに高速に実行されます。上記のようなコードを実行すると、関数の最後まで dtor 文字列がコンソールに出力されません。したがって、一時的なものは作成されていないようで、私のコードはより効率的に実行されます。
class Object
{
public:
Object()
{
mSize = 0;
}
Object( string & name, int size )
:
mName(name),
mSize(size)
{
}
~Object()
{
cout << "Object Dtor called" << endl;
}
string mName;
int mSize;
};