在C ++中,除了动态内存分配之外,以下两行代码之间是否存在功能差异:Time t (12, 0, 0); //t is a Time objectTime* t = new Time(12, 0, 0);//t is a pointer to a dynamically allocated Time object我当然假设定义了一个Time(int,int,int)ctor。我也意识到在第二种情况下,t将需要删除,因为它是在堆上分配的。还有其他区别吗?
3 回答
FFIVE
TA贡献1797条经验 获得超6个赞
这条线:
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则一般存储在堆栈上。
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
另一个明显的区别是访问t的变量和方法。
Time t (12, 0, 0);
t.GetTime();
Time* t = new Time(12, 0, 0);
t->GetTime();
郎朗坤
TA贡献1921条经验 获得超9个赞
我想你已经明白了所有的不同之处。假设你很清楚通过指针和变量访问t成员的语法差异(好吧,指针也是一个变量,但我想你明白我的意思)。并假设您在将t传递给函数时知道按值调用和按引用调用的区别。而且我认为你也明白如果你将t分配给另一个变量并通过其他变量进行更改会发生什么。结果将根据t是否为指针而不同。
- 3 回答
- 0 关注
- 448 浏览
添加回答
举报
0/150
提交
取消