【发布时间】:2014-09-28 01:47:30
【问题描述】:
我知道当两个
指针寻址同一个动态分配的对象。如果delete 是
应用于其中一个指针,然后对象的内存返回到
免费商店。如果我们随后删除第二个指针,那么 free
商店可能已损坏。
但为什么这段代码不会导致运行时错误?
string *str_1 = new string;
auto str_2 = str_1;
*str_1 = "AAA";
cout<<*str_2<<endl;
delete str_1;
delete str_2; // No Error
// Prints AAA
【问题讨论】:
-
你处于未定义行为的土地上。这就是为什么。
-
未定义的行为意味着它只有在你足够幸运的情况下才会崩溃
-
删除后能打印str_1和str_2的值吗?
-
@chiel 是的,我可以,但它是未定义的,这意味着这块内存可能被覆盖,随时可能出错
-
str_1 和 str_2 的值不是未定义的。只有他们指向的记忆可能不再存在。