MyObject *o;
o = new MyObject();
そして、これがない:
MyObject o = new MyObject();
はなぜ?
MyObject *o;
o = new MyObject();
そして、これがない:
MyObject o = new MyObject();
はなぜ?
キーワードnew
returns a pointer。オブジェクトのポインタに割り当てる必要があります。
また、これは動作します:EDIT
をMyObject o = MyObject();
:
セスはコメントとしては、上記と同等です:
MyObject o;
デフォルトコンストラクタ(つまりパラメータなし)があればと呼ばれていますコンストラクタは与えられません。
または 'MyObject o;' –
私は見る!私はJavaを学んだ後にC++を学んでいるので、私はオブジェクトをインスタンス化するために 'new'が必要だったという印象を受けました。 – Peter
見積もりヨーダ:「あなたが学んだことを忘れる必要があります。 ;) –
これらは同等ではないためです。試してみてください:
MyObject* o = new MyObject();
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()};
です。
なぜポインタが必要ですか? – ipc
それは私が理解しようとしていることです。 @MPelletierはそれを私に説明したようです。 – Peter