可以说,我有一个指针
int*l1 = new int [100*100];
int*l2 = l1;
现在,l1和l2都指向相同的整数序列.我将一些值存储在其中.
让我们说,我做
删除[] l1;
l2也被删除了吗?
如果我使用打印l2的元素
for(int i = 1; i <= 10000; i ++){
Run Code Online (Sandbox Code Playgroud)cout<<l2[i];
}
这些价值会被打印好吗?
bst*_*our 19
i2仍指向同一个地方,但现在该内存已被释放.试图通过它访问任何东西是未定义的行为,这意味着您的价值可能会被打印,或者您的房子可能会着火.这不取决于你.
要迂腐,i1和i2都不会被删除,但他们指出的记忆是.它们仍保留相同的值,但现在可以将其中的内存重用于其他内容.使用已传递给的指针是不安全的,delete
因为内存可能已经存在其他内容.
这是一个可以帮助您理解的类比。
指针就像公寓楼的地址。
许多人可能有同一个建筑物的地址。
如果其中一个改变了阵列(想对建筑物进行翻新),每个人都将看到它,因为他们都在看同一件事。
当您“删除”阵列时,您会将公寓大楼标记为已谴责并可以重新开发。
删除后,现在很多人可能仍然拥有这栋受谴责的建筑物的地址。
如果他们在删除阵列(建筑物遭到谴责)后引用该阵列,则该阵列可能存在或可能不存在。这取决于城市是否能够拆除被毁建筑物。这样做并不安全,但没有什么可以阻止您这样做。有时您会很幸运,而建筑物仍在那儿。有时,您会在该地方发现一些新东西。有时建筑物掉在你身上。