首页 >后端开发 >C++ >'new”与非'new”对象实例化:主要功能差异是什么?

'new”与非'new”对象实例化:主要功能差异是什么?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-06 22:41:12746浏览

`new` vs. Non-`new` Object Instantiation: What are the Key Functional Differences?

实例化对象:“new”与非“new”

除了内存分配之外,以下几行之间还存在哪些功能差异代码?

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 t (12, 0, 0);,在本地范围内创建一个 Time 类型的变量 t。该变量通常分配在堆栈上,并在其作用域结束时被销毁。

'new'实例化

相反,第二行,Time* t = new Time(12, 0, 0);,(通常)通过 ::operator new() 或 Time::operator 在堆上分配一块内存new() 函数。然后使用 Time::Time() 构造函数初始化该内存块,并将新分配的内存的地址设置为 this 指针。指向已分配内存的指针存储在变量 t 中。

其他差异

虽然主要差异在于内存分配,但还有一些其他细微差别:

  • 生命周期:非“新”对象具有自动存储期限,这意味着它们在作用域结束时会自动销毁。另一方面,“新”对象具有动态存储持续时间,必须显式删除才能回收其内存。
  • 范围:非“新”对象被定义并存在于其本地范围内。 “新”对象在程序堆栈之外分配,并且不限于任何特定范围。
  • 所有权:“新”对象的内存必须显式管理,并且必须安全地取消引用相关指针。非“新”对象由编译器自动管理,因此不需要显式内存清理。

以上是'new”与非'new”对象实例化:主要功能差异是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn