在类方法中使用new运算符的动态分配内存的生命周期和范围是多少?

use*_*516 1 c++ oop dynamic-memory-allocation

我有一个类使用new运算符分配一些内存的方法,类的其他成员可以超出那个内存吗?课外怎么样?

Sho*_*hoe 5

通常,只要您没有使用delete或者显式地释放它,动态分配的内存就会"生效" delete[].

范围而言:没有动态分配内存的范围.我们通常谈论自动内存的范围(因为自动内存将在范围的末尾被释放).另一方面,指向动态分配的内存的指针范围的规则与任何其他自动对象相同.

在C++标准(N3797草案)中,这在§3.7.4/ 1中指定:

可以在程序执行期间动态创建对象(1.9),使用new-expressions(5.3.4),使用delete-expressions(5.3.5)销毁对象.C++实现通过全局分配函数operator newoperator new[]全局释放函数运算符delete和提供对动态存储的访问和管理operator delete[].


dhe*_*ein 2

new运算符与纯 C 中的相同。malloc()它的生命周期是直到它被释放为止,就像您所做的那样delete

引用 C99 7.20.3 :

已分配对象的生命周期从分配开始一直延伸到释放为止。

在c++98标准中是这样说的:

3.7.3

动态存储持续时间 [basic.stc.dynamic] 1 可以在程序执行期间 (1.9) 使用 new 表达式 (5.3.4) 动态创建对象,并使用 delete 表达式 (5.3.5) 销毁对象。

编辑

这甚至意味着,它的生命周期甚至可能超过程序的生命周期。如果您不这样做,常见操作系统会为您释放内存。

但标准并没有说实现必须关心程序终止后未释放的内存,这没有任何意义。