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 サイトの他の関連記事を参照してください。