这是安全和正确的吗?我的意思是删除只关心它给出的地址,还是删除原始指针变量很重要?C++重新指定指针然后删除它
myClass *p1 = new myClass();
myClass *p2 = p1;
delete p2;
p1 = NULL;
p2 = NULL;
这是安全和正确的吗?我的意思是删除只关心它给出的地址,还是删除原始指针变量很重要?C++重新指定指针然后删除它
myClass *p1 = new myClass();
myClass *p2 = p1;
delete p2;
p1 = NULL;
p2 = NULL;
删除只关心地址,所以你的代码是完全合法的。
由于p1和p2指向相同的对象,因此如果您delete
它通过p2,您也将删除指向p1的内容。所以这是正确的。
这很好。您将内存分配给了p1,然后在p2中引用了相同的内存。当你在p2上调用delete的时候,p1的内存也被删除了(它们是同一个东西,位置和全部)。将它们都设置为NULL也是正确的,因为在此之后删除p1可能会导致一些问题,因为它不再指向有效内存。
这是安全和正确的吗?
它作品。也就是说,它具有明确定义的行为,并且不泄漏(假设它编译)。
但安全吗?这是一个危险想法有别名指针运行免费。你必须跟踪哪些指针已被删除,哪些不是;这指向已被删除但没有的内存。
使用RAII启用的句柄来管理动态分配的对象(如std::unique_ptr
和std::shared_ptr
(或增强替换))要安全得多。 std::unique_ptr
不允许别名,并且std::shared_ptr
允许以安全方式混叠。
'int * p1 = new myClass();'除非'myClass'是'int'的typedef,这怎么可能工作? – ildjarn
对不起,我最初使用int,编辑后 – user1171946