4

これは機能します:

MyObject *o;
o = new MyObject();

そして、これはしません:

MyObject o = new MyObject();

なんで?

4

3 に答える 3

10

キーワードnew はポインタを返します。オブジェクトのポインタに割り当てる必要があります。

これも機能します:

MyObject o = MyObject();

編集:

Sethがコメントしたように、上記は次と同等です。

MyObject o;

コンストラクターが指定されていない場合は、デフォルトのコンストラクター(つまり、パラメーターなし)が呼び出されます。

于 2012-04-14T19:45:45.390 に答える
5

それらは同等ではないからです。試す:

 MyObject* o = new MyObject();
于 2012-04-14T19:44:43.930 に答える
4

new MyObject()タイプのオブジェクトへのポインタを返しますMyObject。つまり、実際にはオブジェクトを割り当てようとしていますMyObject*(そうです、ポインタもオブジェクトと見なすことができます)。MyObject*したがって、の変数またはのような互換性のあるものを宣言する必要がありますstd::shared_ptr<MyObject>

適切な初期化は

// in C++03
MyObject* o(new MyObject());

// in C++11
MyObject* o {new MyObject()};

割り当て中

MyObject* o = new MyObject();

も有効です。

于 2012-04-14T19:48:56.450 に答える