1

私が理解していることから、動的メモリ割り当てを使用してオブジェクトの有効期間を制御できます。オブジェクトを「新規作成」すると、削除するまでメモリ内のヒープに残ります。

さて、物事はそれほど単純ではないことがあります。これは、特定のメモリ ブロックを解放するまで予約しておき、そのメモリ ブロック内のデータの破壊を防ぐシナリオの場合です。たとえば、スタックに割り当てられたオブジェクトへのポインターをベクターに挿入したいと思います。オブジェクトへのポインタがそのベクトルにあるときはいつでも、ポインタが指すオブジェクトは破棄できません。これは安全上の理由によるものです。これをどのように達成し、動的メモリ割り当てを使用してメモリのブロックを予約できますか?

4

3 に答える 3

6

やりたいことをする最も簡単な方法は、スマートポインターを使用することです

以下を使用できます。

「スマート ポインターは、動的に割り当てられた (ヒープ) オブジェクトへのポインターを格納するオブジェクトです。それらは、適切な時点でポイントされたオブジェクトを自動的に削除することを除いて、組み込みの C++ ポインターのように動作します。スマート ポインターは、例外に直面した場合に特に役立ちます。動的に割り当てられたオブジェクトの適切な破棄を保証し、複数の所有者によって共有されている動的に割り当てられたオブジェクトを追跡するためにも使用できます。

概念的には、スマート ポインターは、指しているオブジェクトを所有していると見なされ、オブジェクトが不要になったときにそのオブジェクトを削除する責任があります。」

std::unique_ptr は、ポインターを介してオブジェクトの唯一の所有権を保持し、unique_ptr がスコープ外になるとそのオブジェクトを破棄するスマート ポインターです。2 つの unique_ptr インスタンスが同じオブジェクトを管理することはできません。

std::shared_ptr は、ポインターを介してオブジェクトの共有所有権を保持するスマート ポインターです。複数の shared_ptr オブジェクトが同じオブジェクトを所有している場合があります。

于 2013-04-30T06:36:02.420 に答える