当多个指针指向它时删除一个对象?

Dan*_*nny 7 c++ pointers memory-management

我被告知,如果我有多个指针指向同一个对象,我无法正常删除它(使用delete关键字).相反,我被告知我需要将指针设置为NULL或0.

鉴于我有:

ClassA* object = new ClassA();
ClassA* pointer1 = object;
ClassA* pointer2 = object;
Run Code Online (Sandbox Code Playgroud)

所以要delete pointer1pointer2,我需要做到以下几点?

pointer1 = 0;
pointer2 = 0:
Run Code Online (Sandbox Code Playgroud)

一旦我将其设置为NULL,我还需要使用关键字delete吗?或者只是将它设置为0足够好?

Aes*_*ete 9

无论何时你new是一个物体,你都需要delete它,释放记忆

ClassA* object = new ClassA();

delete object; // Free's the memory you allocated.
Run Code Online (Sandbox Code Playgroud)

设置指针的目的NULL是停止解除引用无效的指针

object = NULL;
Run Code Online (Sandbox Code Playgroud)

这样做是为了在尝试取消引用之前执行测试:

if(object != NULL)
{
  object->SomeMethod(); // We can assume it's safe to use the pointer.
}
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以从指向它的任何指针中删除内存.

ClassA* object = new ClassA();
ClassA* pointer1 = object;
ClassA* pointer2 = object;

delete pointer1; 
Run Code Online (Sandbox Code Playgroud)

object, pointer1, and pointer2现在指向已经释放的内存,除非将它们重新定义,否则它们都应该设置为NULL.