[英]When allocating on the heap, in which cases does “automatic” cleanup occur (if at all) and in which cases does it not?
我听说对于原语,当它们超出范围时会发生“自动”清除,但是对于类或结构则不会发生。 这是真的?
例如:
int * i = new int[5];
与
Foo * foo = new foo;
我听说过这两种方式,并试图确定哪一种是正确的。
我听说对于原语,当它们超出范围时会发生“自动”清除,但是对于类或结构则不会发生。 这是真的?
不,那是不正确的。 存储的类型以及对象是否为内置类型都是C ++中完全正交的概念。 如果对象具有自动存储,则在退出其作用域时,无论其类型如何,都会发生“清除”。
在发布的两个示例中,必须调用delete[]
和delete
释放动态分配的内存并调用需要调用的所有析构函数。
这很容易记住。 每当调用new
都必须调用delete
方法。 因为new int[5]
在堆上保留了5个整数的内存,因此必须在某个时候释放它。
对于new Foo
也是如此,它重新占用了堆上的一个Foo
内存。 (然后调用构造函数等)
要在堆栈上保留内存,请使用以下格式:
{
int fiveInts[5];
Foo foo;
//valid here
}
//foo's destructor has been called
//and fiveInts is out of scope (but has no destructor (practically speaking))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.