web-dev-qa-db-ja.com

ベクトル内のコピー不可能な要素

コピーできないクラスがあります(つまり、コピーコンストラクターと代入演算子は「削除」としてマークされています)。これらをstd :: vectorに保存したいと思います。

これはRAIIクラスであるため、ポインターまたは参照を格納するだけでは、私が探しているものではありません。

新しいイニシャライザーリストと移動コンストラクターに関する私の知識は多少制限されていますが、これは可能ですか?

18
Lieuwe

はい、NotCopyableが移動可能な場合は、std::vector<NotCopyable>を使用できます。

struct NotCopyable
{
    NotCopyable() = default;
    NotCopyable(const NotCopyable&) = delete;
    NotCopyable& operator = (const NotCopyable&) = delete;

    NotCopyable(NotCopyable&&) = default;
    NotCopyable& operator = (NotCopyable&&) = default;
};

int main()
{
    std::vector<NotCopyable> v;
    NotCopyable nc;

    v.Push_back(NotCopyable{});
    v.emplace_back();
    v.Push_back(std::move(nc));
}

実例

22
Jarod42

要素が移動可能である限り、はい、単にそれらをベクトルに格納します。