2012-08-07 92 views
7

如果我有一个指针,像这样:删除指针是否删除它指向的内存?

int *test = new int; 

我创建另一个指针指向test像这样:

int *test2 = test; 

然后我删除test2

delete test2; 

这是否意味着它也会删除test的内存,或者我还必须致电delete test

+3

你并没有真的“删除一个指针”,你可以将它的内存释放*指向*。 – 2012-08-07 23:00:33

回答

13

是的,内存将是删除释放,因为两个指针指向相同的内存。

此外,test现在将一个悬空指针(如将test2)和解除引用它会导致未定义行为

+0

好的谢谢你的快速回答,我相信你回答了我的最后一个问题。所以,如果我有一个函数,我把它称为这个函数(新的Childclass),如果我有一个指针,在那个函数内像这样void Function(BaseClass * instance){childInstance = instance; }如果我删除childInstance它也将删除实例参数以及因此没有内存泄漏? – user1583115 2012-08-07 23:02:33

+0

@ user1583115是的。 – 2012-08-07 23:03:13

+0

此外,“双重删除”(试图释放相同的内存两次)是未定义的行为。 – 2012-08-07 23:08:28

5

你永远不删除内存test,也不删除存储的test2。有史以来被删除的唯一的事情就是对象*test,这是相同的对象*test2(因为指针是一样的),所以你必须只删除一次。

这是一个非常常见且非常不幸的误称,它传播并破坏了C++新手的头脑:当你真正的意思是“释放内存到”时,人们经常说口语是“释放指针”或“删除指针”我有一个指针“,或者”删除一个我有指针的对象“。这是真的,这种相关结构(即std::freedelete)取作为其参数的指针,有问题的实体,但是,这并不意味着指针自身操作的 - 它只是传达的对象位置利益。