猿问

使用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。我也意识到在第二种情况下,t将需要删除,因为它是在堆上分配的。还有其他区别吗?


慕无忌1623718
浏览 449回答 3
3回答

FFIVE

这条线:Time t (12, 0, 0);... Time在本地范围内分配一个类型的变量,通常在堆栈上,当它的作用域结束时将被销毁。相比之下:Time* t = new Time(12, 0, 0);...通过调用::operator new()或分配一块内存Time::operator new(),然后Time::Time()使用thisset 调用该内存块中的一个地址(并且还作为结果返回new),然后存储在该内存块中t。如你所知,这是一般的堆(默认)完成,并要求您delete在以后的节目,而指针t则一般存储在堆栈上。

摇曳的蔷薇

另一个明显的区别是访问t的变量和方法。Time t (12, 0, 0);t.GetTime();Time* t = new Time(12, 0, 0);t->GetTime();

郎朗坤

我想你已经明白了所有的不同之处。假设你很清楚通过指针和变量访问t成员的语法差异(好吧,指针也是一个变量,但我想你明白我的意思)。并假设您在将t传递给函数时知道按值调用和按引用调用的区别。而且我认为你也明白如果你将t分配给另一个变量并通过其他变量进行更改会发生什么。结果将根据t是否为指针而不同。
随时随地看视频慕课网APP
我要回答