2012-04-14 18 views

答えて

5

キーワードnewreturns a pointer。オブジェクトのポインタに割り当てる必要があります。

また、これは動作します:EDIT

MyObject o = MyObject(); 

セスはコメントとしては、上記と同等です:

MyObject o; 

デフォルトコンストラクタ(つまりパラメータなし)があればと呼ばれていますコンストラクタは与えられません。

+5

または 'MyObject o;' –

+0

私は見る!私はJavaを学んだ後にC++を学んでいるので、私はオブジェクトをインスタンス化するために 'new'が必要だったという印象を受けました。 – Peter

+5

見積もりヨーダ:「あなたが学んだことを忘れる必要があります。 ;) –

3

これらは同等ではないためです。試してみてください:

MyObject* o = new MyObject(); 
4

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

割り当て

MyObject* o = new MyObject(); 

が同様に有効である一方で、適切な初期化が

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

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

です。

関連する問題