这样安全吗?我的意思是删除只关心它给出的地址,还是删除原始指针变量很重要?
myClass *p1 = new myClass();
myClass *p2 = p1;
delete p2;
p1 = NULL;
p2 = NULL;
答案 0 :(得分:6)
仅删除关于地址的关注,因此您的代码完全合法。
答案 1 :(得分:6)
这样安全吗?
工作。也就是说,它具有明确定义的行为并且不会泄漏(假设它编译)。
但安全吗?使用别名指针自由运行是一个危险的想法。您必须跟踪哪些指针已被删除,哪些指针未被删除;哪个指向被删除的内存,哪些没有。
使用支持RAII的句柄来管理动态分配的对象会更安全,例如std::unique_ptr
和std::shared_ptr
(或者提升替换)。 std::unique_ptr
不允许别名,std::shared_ptr
允许以安全的方式进行别名。
答案 2 :(得分:3)
由于p1和p2指向同一个对象,如果你通过p2 delete
,你也会删除指向p1的内容。所以这是正确的。
答案 3 :(得分:1)
这很好。您已将内存分配给p1,然后在p2中引用了SAME内存。当您在p2上调用delete时,p1也被删除的内存(它们是相同的东西,位置和所有内容)。将它们都设置为NULL也是正确的,因为删除p1之后可能会导致一些问题,因为它不再指向有效的内存。