为了账号安全,请及时绑定邮箱和手机立即绑定

使用new与without实例化对象之间的区别是什么

使用new与without实例化对象之间的区别是什么

C++
慕无忌1623718 2019-09-19 15:16:51
在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则一般存储在堆栈上。


查看完整回答
反对 回复 2019-09-19
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

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


Time t (12, 0, 0);

t.GetTime();


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

t->GetTime();


查看完整回答
反对 回复 2019-09-19
?
郎朗坤

TA贡献1921条经验 获得超9个赞

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


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 448 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信