ポインター オブジェクトが 1 つのポイントに割り当てられており、それがさまざまな入れ子関数に返されているとします。ある時点で、このポインターが有効であるか、誰かによって既に割り当て解除されているかを確認した後、このポインターの割り当てを解除したいと考えています。
これらのいずれかが機能するという保証はありますか?
if(ptr != NULL)
delete ptr;
また
if(ptr)
delete ptr;
このコードは機能しません。それは常にセグメンテーション違反を与えます
#include <iostream>
class A
{
public:
int x;
A(int a){ x=a;}
~A()
{
if(this || this != NULL)
delete this;
}
};
int main()
{
A *a = new A(3);
delete a;
a=NULL;
}
編集
ポインターについて話すときはいつでも、人々はスマート ポインターを使用しない理由を尋ね始めます。スマートポインターがあるからといって、誰もが使えるわけではありません。
古いスタイルのポインターを使用するシステムに取り組んでいる可能性があります。ある晴れた日、それらすべてをスマートポインターに変換することはできません。