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()