删除指针

Ben*_*Ben 0 c++ pointers

在C++中,推荐删除指针的方法是什么?例如,在下面的例子中,我是否需要所有三行来安全地删除指针(如果是这样,他们做了什么)?

// Create
MyClass* myObject;
myObject = new MyClass(myVarA, myVarB, myVarC);

// Use
// ...

// Delete
if(myObject) { 
    delete myObject; 
    myObject = NULL; 
}
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 6

不,你不需要检查NULL.
delete如果传递的指针是,则要小心NULL.

delete myObject; 
myObject = NULL; 
Run Code Online (Sandbox Code Playgroud)

足够了.

作为一般策略,尽可能避免使用freestore分配,并且必须使用智能指针(RAII)而不是原始指针.


C++ 03标准部分§3.7.3.2.3:

提供给标准库中提供的一个释放函数的第一个参数的值可以是空指针值; 如果是这样,对释放功能的调用无效.否则,标准库中提供给operator delete(void*)的值应该是前一次调用标准库中的operator new(size_t)或operator new(size_t,const std :: nothrow_t&)返回的值之一. ,并且标准库中提供给operator delete的值应该是之前调用标准库中的operator new或operator new [](size_t,const std :: nothrow_t&)返回的值之一.