0

C++ プログラムにいくつかの共有ポインターがあります。(new を使用して) ポインターにメモリを割り当てた後、プログラムでいくつかのことを行い、他のモジュールがこれらのポインターを削除したかどうかを知る必要があります。ポインターが削除されていると、アクセス違反の読み取りエラーが発生するためです。これをチェックする機能や方法はありますか?

4

1 に答える 1

3

std::shared_ptr「共有ポインター」と言うとき、またはboost:shared_ptrのような実際のスマートポインタークラスを参照しているのではなく、単に関数から関数に渡される生のポインターを参照していると思います。

生のポインターの有効性を判断するための、信頼性が高く、安全で、クロスプラットフォームな方法はありません。

ただし、スマート ポインター クラスを使用すると、動的メモリを管理する負担が大幅に軽減されます。生のポインターを渡す代わりに、スマート ポインターを渡します。これらのスマート ポインター (少なくともそのshared_種類) は参照カウントされます。ポインターへの参照が少なくとも 1 つ存在する限り、指しているオブジェクトはdeleted になりません。最後の参照が削除されると、オブジェクトは自動的にdeleted になります。

上記のsmart_ptrI 参照には、制御対象へのいわゆる「強い参照」があります。制御対象への弱い参照を維持するスマート ポインターもあります。これらの弱いポインタは、オブジェクトの削除を妨げず、制御対象オブジェクトを使用する前に有効性をチェックできます。

詳細については、ドキュメントを参照してください。

于 2013-06-26T20:34:40.233 に答える