C++ C++;指针和对象实例化

C++ C++;指针和对象实例化,c++,object,pointers,new-operator,instantiation,C++,Object,Pointers,New Operator,Instantiation,这项工作: MyObject *o; o = new MyObject(); 这并不是: MyObject o = new MyObject(); 为什么?因为它们不是等价物。尝试: MyObject* o = new MyObject(); 关键字new。必须将其指定给对象的指针 这也将有助于: MyObject o = MyObject(); 编辑: 正如赛斯所评论的,上述内容相当于: MyObject o; 如果未给出构造函数,则调用默认构造函数(即不带参数)。new MyOb

这项工作:

MyObject *o;
o = new MyObject();
这并不是:

MyObject o = new MyObject();

为什么?

因为它们不是等价物。尝试:

 MyObject* o = new MyObject();

关键字
new
。必须将其指定给对象的指针

这也将有助于:

MyObject o = MyObject();
编辑:

正如赛斯所评论的,上述内容相当于:

MyObject o;
如果未给出构造函数,则调用默认构造函数(即不带参数)。

new MyObject()
返回指向类型为
MyObject
的对象的指针。因此,实际上您正在尝试分配对象
MyObject*
(是的,指针也可以被视为对象)。因此,您必须声明一个
MyObject*
变量或类似
std::shared\u ptr
的兼容变量

正确的初始化是

// in C++03
MyObject* o(new MyObject());

// in C++11
MyObject* o {new MyObject()};
在执行任务时

MyObject* o = new MyObject();

也是有效的。

这就是我想要理解的@姆佩莱蒂埃似乎已经向我解释过了。我明白了!我在学习java之后正在学习C++,所以我觉得,新< /Cord>需要实例化一个对象。@彼得,只有当你需要一个指针时才需要它。使用
new
在堆上而不是程序堆栈上分配内存。把它想象成指向“程序之外”的东西的指针。一些“新的”。实际上
MyObject o=MyObject()并不完全等同于
MyObject o虽然效果相同;前者创建一个默认构造的临时
MyObject
,然后使用复制构造函数用临时对象初始化
o
,而后者只是原地默认构造
o
。如果没有优化,后者通常会更快。@ AndreasBrinck在C++中,我们将它改为“你必须<代码>删除< /代码>你的代码>新< /代码>”彼得伍德是真的,但这不是尤达所说的。(顺便说一句,使用更新的功能,您甚至不应该使用
new
,而是
make_共享
和家庭。)