これはポインタの仕組みではありません。
ポインタをnullに設定すると、メモリは誰かが変更するまでそこに残ります。たとえメモリに0があるとしても、これは例えば整数0を意味することもあります。これは、C++の通常のポインタだけでなく、共有メモリの場合も同様です。
あなたがする必要があるのは、メモリを「無効」にすることです。これをC++で行う標準はありませんので、これはあなた自身で定義する必要があります。
ここにはいくつかのオプションがあります。
1つは、自分自身に無効な値を定義し、この値にデータを設定することです。
など。 int
を持っていても、そこに正の数値だけが格納されていることがわかっている場合は、-1
に設定して無効(または最大/最小のint、私はあなたがポイントを取得したものとします)とマークできます。
そして、それは
struct Type
{
bool valid = true; //c++11 initialize to true
//other data members
};
有効であるかどうか、あなたがboolean型のフラグを追加することができ、あなたの記憶のカスタム構造体を持っているなら、あなたは代わりにポインタ
//in some header
static const int INVALID_VALUE = -1;
//some process
type->shared_int = INVALID_VALUE;
//somewhere else
if(type->shared_int != INVALID_VALUE) //or whatever
//do stuff
のことをご確認ください
ここで、メモリを無効にする場合は、メンバをfalseに設定してチェックしてください。
//some process
type->valid = false;
//somewhere else
if(type->valid)
//do stuff
あなたがオブジェクトの明確な所有権を持っている場合は、通常のポインタを使用しているとき、あなたはそれらの事を避けることができます。
少し複雑になる可能性があるプロセス間通信では、このようなメカニズムを使用する必要があります。
メモリ(割り当てと割り当て解除)を担当するプロセスを1つ持ち、他のプロセスが完了したことを確認するか、削除するときにメモリにアクセスする必要がなくなるようにすることをお勧めします。しかし、これはいつも可能ではありません。
またはC++ 11 type = nullptrです。スマートなポインターはさらに良いでしょう。そこに '.reset()'を呼び出すこともできます。 – Hayt
@KlasLindbäckそれは効果がありません。この場合、タイプ== NULLはfalseです。 – Padmelina
@Haytここでスマートなポインタが必要であることはまったくわかりません。 – juanchopanza