1. ホーム
  2. c++

[解決済み] c++でnewせずにコンストラクタを呼び出す

2022-04-23 06:43:43

質問

C++でオブジェクトを作成する際、よくあるのが

Thing myThing("asdf");

この代わりに

Thing myThing = Thing("asdf");

これは、少なくともテンプレートがない限り、(gccを使用して)動作するようです。私の質問は、最初の行が正しいかどうか、正しい場合はそれを使用する必要があるかどうかです。

どのように解決するのですか?

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

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

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

  1. 型のオブジェクトを作成します。 Thing を使用して、コンストラクタ Thing(const char*)
  2. 型のオブジェクトを作成します。 Thing を使用して、コンストラクタ Thing(const Thing&)
  3. コール ~Thing() で作成されたオブジェクトに対して、ステップ#1