我有一个类使用new运算符分配一些内存的方法,类的其他成员可以超出那个内存吗?在课外怎么样?
答案 0 :(得分:5)
通常,只要您没有使用delete
或delete[]
显式释放内存,动态分配的内存就会“生效”。
就范围而言:没有动态分配内存的范围。我们通常会讨论自动内存的范围(因为自动内存将在范围的末尾被释放)。另一方面,指向动态分配的内存的指针范围的规则与任何其他自动对象相同。
在C ++标准(N3797草案)中,这在§3.7.4/ 1中指定:
可以在程序执行期间动态创建对象(1.9),使用 new-expressions (5.3.4),并使用 delete-expressions (5.3.5)销毁对象。 C ++实现通过全局分配函数
operator new
和operator new[]
以及全局释放函数运算符delete
和operator delete[]
提供对动态存储的访问和管理。
答案 1 :(得分:3)
答案 2 :(得分:2)
new
运算符与纯C中的malloc()
运算符相同。它的生命周期是在它被释放之前,就像使用delete
一样!
引自C99 7.20.3:
分配对象的生命周期延长 从分配到解除分配。
在c ++ 98标准中,这是这样说的:
3.7.3
动态存储时长[basic.stc.dynamic] 1使用newexpressions可以在程序执行期间动态创建对象(1.9) (5.3.4),和 使用deleteexpressions销毁 (5.3.5)。
修改强>
这甚至意味着,它的寿命甚至可能超过程序的生命周期。 如果您不这样做,通用操作系统会为您释放内存。
但标准并没有说实现必须关心程序终止后没有释放内存,无所谓有任何意义。