c ++:新Object()和Object()之间的区别是什么

所以在C ++中,您可以使用new关键字实例化对象,否则...

Object o = new Object();

但你也可以做

Object o = Object();

两者之间的差异究竟是什么,为什么我会用另一种呢?


你不能做Object o = new Object(); new运算符返回一个指向该类型的指针。 它必须是Object* o = new Object(); Object实例将在堆上

Object o = Object()将在堆栈上创建一个Object实例。 我的C ++是生锈的,但我相信即使这个天真的看起来像一个创建后跟一个赋值,它实际上只会作为构造函数调用完成。


第一种类型:

Object* o = new Object();

将在堆上创建一个新对象并将地址分配给o。 这只会调用默认的构造函数。 完成后,您将不得不手动释放与该对象关联的内存。

第二种类型:

Object o = Object();

将使用默认构造函数在堆栈上创建一个对象,然后调用o上的赋值构造函数。 大多数编译器将消除转让呼叫,但如果您在转让操作中有(预期或其他)副作用,则应考虑到这一点。 在不调用赋值操作的情况下实现创建新对象的常规方法是:

Object o; // Calls default constructor

我正在搜索上面的问题,但有变化,所以我会在这里添加我的问题

我注意到visual studio 2015编译器和gcc v4.8.5的区别。

class Object
{
public:
x=0;
void display(){ std::cout<<" value of x:   "<<x<<"n";}
};

Object *o = new Object;
o->display(); // this gives garbage to this->x , uninit value in visualstudio compiler and //in linux gcc it inits this->x to 0

Object *o = new Object(); // works well
o->display();
链接地址: http://www.djcxy.com/p/13807.html

上一篇: c++: what's the difference between new Object() and Object()

下一篇: Which is the right way to instantiate objects in C++?