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 回答