以下是Scott Meyer共享的赋值运算符的异常证明方法。任何人都可以告诉我,删除原始指针是否安全?
int *orig =m_p;
m_p=new int (*obj.m_p);
delete orig;
答案 0 :(得分:2)
问题的问题在于,您无法告诉m_p
最初包含的内容。如果某个&intVar
获得了它的值,那么答案是:NO。如果该值已由new
生成但已经delete
d且未设置为NULL,则答案为NO。如果值未定义,则答案是另一个NO。
这样可以保证安全。
答案 1 :(得分:0)
如果没有原始指针
是的你have to delete it
,这是安全的。您可以再做一件事,即在删除它之后将其设置为0,因为删除后将它们设置为0是一个很好的做法,除了析构函数
(因为包含指针的对象实例无论如何都会消失)。该标准允许删除NULL
指针(它什么都不做),任何带内存管理的好操作系统都会导致程序崩溃
首先取消引用(读或写)NULL指针。所以现在由你的要求决定你如何去做它
如果没有原始指针
建议不要使用原始指针,还可以使用其他替代方法,就像使用托管指针类而不是原始指针一样。 std :: auto_ptr<&gt ;, boost :: scoped_ptr<&gt ;, boost :: shared_ptr<>, boost :: weak_ptr<&gt ;, boost :: intrusive_ptr<&gt ;,std :: unique_ptr<> (C ++ 0X)。即使在具有大量内存分配的数百万个线路项目中,也可以使用它,甚至它们很少需要删除任何东西;所有指针都是管理的。