【发布时间】:2017-03-01 06:08:37
【问题描述】:
考虑以下代码:
int a = 10;
int * b = &a;
int * c = b;
delete b; // equivalent to delete c;
我在最后一行的理解是否正确,delete b 和 delete c 是等价的,并且两者都会释放保存 a 的内存空间,因此 a 不再可访问?
【问题讨论】:
-
a尚未动态分配,因此在其上使用delete会导致未定义的行为。 :( -
a 是在栈上创建的,不需要删除它。
-
如果我们忽略堆栈对象的
delete...如果b指向new分配的对象,是的,你是正确的deleteingc或@ 987654333@ 等价:两者都指向同一个deleted 对象 -
@AndrewHenle 但是甚至不需要 sigsegv。
-
您不会在 C++ 中删除指针。 您会删除使用
new分配的对象。
标签: c++ pointers memory-management