这有效:
MyObject *o;
o = new MyObject();
这不是:
MyObject o = new MyObject();
为什么?
答案 0 :(得分:5)
关键字new
returns a pointer。必须将其分配给对象的指针。
这也有效:
MyObject o = MyObject();
编辑:
正如Seth评论的那样,上述内容相当于:
MyObject o;
如果没有给出构造函数,则调用默认构造函数(即没有参数)。
答案 1 :(得分:4)
因为它们不相同。尝试:
MyObject* o = new MyObject();
答案 2 :(得分: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();
也有效。