ホームページ >バックエンド開発 >C++ >`std::unique_ptr` を `std::vector` に正しくプッシュするにはどうすればよいですか?

`std::unique_ptr` を `std::vector` に正しくプッシュするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-28 13:07:16528ブラウズ

How Can I Correctly Push a `std::unique_ptr` into a `std::vector`?

Unique_Ptr を Vector にプッシュバックできません

提供されたコードは、std::unique_ptr を Vector にプッシュしようとします。その結果、一意のポインタでコピー操作を実行できないため、コンパイル エラーが発生しました。

思い出してください。 std::unique_ptr は、特定のオブジェクトへの含まれるポインターの排他的所有権を保証します。これは、一意のポインタを割り当てるときに、所有権がコピーされずに移動されることを意味します。したがって、複数の所有者が一意の所有権の保証に違反するため、一意のポインターのコピーを作成することは禁止されています。

問題を解決し、一意のポインターをベクターに正しくプッシュするには、次のように std::move 関数を使用します。

vec.push_back(std::move(ptr2x));

std::move は、一意のポインターの所有権をベクターに譲渡し、一意の所有権を侵害することなくベクターにポインターを挿入できるようにします。 rules.

このコードでの std::unique_ptr の最初の使用法が間違っていることに注意することが重要です。ローカル変数へのポインタを管理しようとしますが、これはオブジェクトの存続期間に必要な制御と矛盾します。この不一致を防ぐには、たとえば、

std::unique_ptr<int> ptr(new int(1));
を使用してオブジェクトを動的に割り当てます。

以上が`std::unique_ptr` を `std::vector` に正しくプッシュするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。