C++でnewなしでコンストラクタを呼び出す 質問する

C++でnewなしでコンストラクタを呼び出す 質問する

C++でオブジェクトを作成するときによく使われるのが、

Thing myThing("asdf");

これの代わりに:

Thing myThing = Thing("asdf");

これは、少なくともテンプレートが含まれていない限り、(gcc を使用して) 機能するようです。ここでの質問は、最初の行は正しいですか? 正しい場合は、それを使用すべきですか?

ベストアンサー1

どちらの行も実際には正しいのですが、微妙に異なることを行います。

最初の行は、形式のコンストラクターを呼び出して、スタック上に新しいオブジェクトを作成しますThing(const char*)

2つ目はもう少し複雑です。基本的には次のようになります。

  1. Thingコンストラクタを使用して型のオブジェクトを作成するThing(const char*)
  2. Thingコンストラクタを使用して型のオブジェクトを作成するThing(const Thing&)
  3. ~Thing()ステップ1で作成したオブジェクトを呼び出す

おすすめ記事