标题是问题.
我仍然不太了解动态分配存储的行为.
#include <utility>
int main() {
// Case 1:
volatile char *c1 = new char; // I'm gonna make these volatile, so the compiler won't change the code.
volatile char *d1 = c1;
delete d1;
// Case 2:
volatile char *c2 = new char[4];
volatile char *d2 = c2;
delete []d2;
// Case 3:
volatile char *c3 = new char;
volatile char *d3 = std::move(c3);
delete d3;
// Case 4:
volatile char *c4 = new char[4];
delete c4++;
delete []c4;
// Case 5:
volatile char *c5 = new char[4];
for (int i = 0; i < 4; ++i)
delete c5++;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在每种情况下内存都会泄漏吗?
情况4和5是未定义的行为,因此无法确定内存是否泄漏.
对于其他情况,内存不会泄漏.但是,值得说明的是使用它new
并且delete
完全是非常糟糕的,你应该总是使用资源管理类来保存内存.或者更简单地说,你不应该首先提出这个问题.
归档时间: |
|
查看次数: |
128 次 |
最近记录: |