C++ プログラムにいくつかの共有ポインターがあります。(new を使用して) ポインターにメモリを割り当てた後、プログラムでいくつかのことを行い、他のモジュールがこれらのポインターを削除したかどうかを知る必要があります。ポインターが削除されていると、アクセス違反の読み取りエラーが発生するためです。これをチェックする機能や方法はありますか?
1 に答える
3
std::shared_ptr
「共有ポインター」と言うとき、またはboost:shared_ptr
のような実際のスマートポインタークラスを参照しているのではなく、単に関数から関数に渡される生のポインターを参照していると思います。
生のポインターの有効性を判断するための、信頼性が高く、安全で、クロスプラットフォームな方法はありません。
ただし、スマート ポインター クラスを使用すると、動的メモリを管理する負担が大幅に軽減されます。生のポインターを渡す代わりに、スマート ポインターを渡します。これらのスマート ポインター (少なくともそのshared_
種類) は参照カウントされます。ポインターへの参照が少なくとも 1 つ存在する限り、指しているオブジェクトはdelete
d になりません。最後の参照が削除されると、オブジェクトは自動的にdelete
d になります。
上記のsmart_ptr
I 参照には、制御対象へのいわゆる「強い参照」があります。制御対象への弱い参照を維持するスマート ポインターもあります。これらの弱いポインタは、オブジェクトの削除を妨げず、制御対象オブジェクトを使用する前に有効性をチェックできます。
詳細については、ドキュメントを参照してください。
于 2013-06-26T20:34:40.233 に答える