首页 >后端开发 >C++ >C 对象实例化:堆栈与堆:'new”还是不是'new”?

C 对象实例化:堆栈与堆:'new”还是不是'new”?

Linda Hamilton
Linda Hamilton原创
2024-12-02 01:19:13292浏览

C   Object Instantiation:  Stack vs. Heap: `new` or Not `new`?

实例化对象:有或没有New

在 C 中创建对象时,程序员可以使用“new”运算符或直接实例化它们没有它。虽然这两种方法都创建对象,但它们在几个关键方面有所不同。

没有 New

实例化一个没有“new”的对象会直接在当前作用域中为其保留内存。这通常在堆栈上完成,并产生具有自动生命周期的对象。该对象在其定义的范围内自动创建和销毁。

例如:

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

在上面的代码中,“Time”对象“t”在堆栈上创建并且它的生命周期绑定到当前作用域。

With New

使用“new”实例化对象会在堆上动态为其分配内存。这允许在对象的生命周期结束时显式地创建和销毁该对象。指针“t”存储的是对象的堆地址。

例如:

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

这里,指针“t”被赋值为新创建的“Time”的堆地址目的。对象的生命周期与作用域无关,并且一直持续到使用“删除”运算符释放其内存为止。

主要区别

  • 内存分配: 没有“new”创建的对象在堆栈上分配内存,而“new”在堆栈上分配内存
  • 生命周期:不使用“new”实例化的对象具有自动生命周期,而使用“new”创建的对象具有动态生命周期,必须手动删除。

需要注意的是,这些差异是特定于实现的,因为 C 标准没有明确定义堆栈和堆行为。然而,在大多数实际实现中,堆栈内存用于自动对象,而堆内存用于动态对象。

以上是C 对象实例化:堆栈与堆:'new”还是不是'new”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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