一意のポインター (unique_ptr) は、C 11 における一意の所有権の原則を支持します。関数またはコンストラクターの引数として一意のポインターを使用すると、いくつかのオプションが個別に発生します。
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
このメソッドは、一意のポインターの所有権を関数/オブジェクトに転送します。ポインタの内容は関数に移動され、操作後の元のポインタは空のままになります。
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
が許可されますこの関数は、一意のポインタにアクセスし、その所有権を潜在的に要求することができます。ただし、この動作は保証されておらず、ポインターの処理を決定するには関数の実装を検査する必要があります。
Base(std::unique_ptr<Base> const &n);
関数が一意のポインターの所有権を主張しないようにします。ポインターにはアクセスできますが、保存または変更はできません。
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
非定数 L 値参照による受け渡しと同等、ただし、一時的ではない引数を渡すときは std::move を使用する必要があります。所有権は関数によって要求される場合とされない場合があるため、予測が難しくなります。
一意のポインターを移動するには、std::move を使用します。一意のポインタのコピーは許可されていません:
std::unique_ptr<Base> newPtr(std::move(oldPtr));
以上がC で一意のポインタを関数またはコンストラクタの引数として渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。