这有效:
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();
也是有效的。