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