これは機能します:
MyObject *o;
o = new MyObject();
そして、これはしません:
MyObject o = new MyObject();
なんで?
これは機能します:
MyObject *o;
o = new MyObject();
そして、これはしません:
MyObject o = new MyObject();
なんで?
キーワードnew
はポインタを返します。オブジェクトのポインタに割り当てる必要があります。
これも機能します:
MyObject o = MyObject();
編集:
Sethがコメントしたように、上記は次と同等です。
MyObject o;
コンストラクターが指定されていない場合は、デフォルトのコンストラクター(つまり、パラメーターなし)が呼び出されます。
それらは同等ではないからです。試す:
MyObject* o = new MyObject();
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();
も有効です。