使用new和without实例化对象有什么区别

在C ++中,

除了动态内存分配,以下两行代码之间还有一个功能差异:

Time t (12, 0, 0); //t is a Time object

Time* t = new Time(12, 0, 0);//t is a pointer to a dynamically allocated Time object

我假设当然已经定义了一个Time(int,int,int)ctor。 我也意识到,在第二种情况下,由于它是在堆上分配的,因此需要删除它。 还有其他的区别吗?


该行:

Time t (12, 0, 0);

...在局部范围内分配一个类型为Time的变量, 通常在堆栈上,当它的作用域结束时它将被销毁。

相比之下:

Time* t = new Time(12, 0, 0);

...通过调用::operator new()Time::operator new()分配一块内存,然后用this设置调用Time::Time()到该内存块中的一个地址(并返回为new的结果),然后存储在t 。 如你所知,这通常是在堆上完成的(默认情况下),并且要求稍后在程序中delete它,而t的指针通常存储在堆栈中。


另一个更明显的区别是访问t的变量和方法时。

Time t (12, 0, 0);
t.GetTime();

Time* t = new Time(12, 0, 0);
t->GetTime();

就构造函数而言,这两种形式在功能上是相同的:它们只会导致在新分配的对象实例上调用构造函数。 您似乎已经很好地掌握了分配模式和对象生命周期方面的差异。

链接地址: http://www.djcxy.com/p/78541.html

上一篇: What is difference between instantiating an object using new vs. without

下一篇: what is the difference between Malloc and new operator to allocate a memory?