12

重複の可能性:
移動専用型のベクトルをリスト初期化できますか?

このコードをコンパイルするには、gcc 4.6.1 を使用します。

int main()
{
    std::vector<std::unique_ptr<int>> vec({
            std::unique_ptr<int>(new int(0)),
            std::unique_ptr<int>(new int(1)),
        });
    return 0;
}

g ++が不平を言うには、次のようなものがあります

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/../../../../include/c++/4.6.1/bits/stl_construct.h:76:7: **error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&)** [with _Tp = int, _Dp = std::default_delete<int>, std::unique_ptr<_Tp, _Dp> = std::unique_ptr<int>]'

この場合、g++ はまだコピー コンストラクターを試行しているようですが、イニシャライザー リストに入力したのは右辺値です。では、コピー不可のコンテナをイニシャライザ リストで初期化するにはどうすればよいでしょうか。

4

1 に答える 1

10

オブジェクトはメンバーへの const アクセスのみを許可するため、オブジェクトを初期化リストから移動することはできません。そのため、イニシャライザ リストを使用してコンストラクタを移動することはできません。コピーのみ可能です。

于 2011-07-24T00:45:37.807 に答える