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
pointer1
和pointer2
,我需要做到以下几点?
pointer1 = 0;
pointer2 = 0:
Run Code Online (Sandbox Code Playgroud)
一旦我将其设置为NULL,我还需要使用关键字delete
吗?或者只是将它设置为0足够好?
无论何时你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.
归档时间: |
|
查看次数: |
11579 次 |
最近记录: |