C ++指针和对象实例化

时间:2012-04-14 19:43:32

标签: c++ object pointers new-operator instantiation

这有效:

MyObject *o;
o = new MyObject();

这不是:

MyObject o = new MyObject();

为什么?

3 个答案:

答案 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();

也有效。