4

Tが可動オブジェクトであると仮定しましょう:

vector<T> v;
v.resize(...) 

再割り当てが必要な場合、そのコードはコピーを呼び出すか、すべての要素のコンストラクターを移動しますか?

答えが「コンストラクターの移動」である場合、コンパイラーはこれを使用する必要があることをどのように認識しますか?

4

1 に答える 1

6
#include <vector>
#include<memory>

int main() {

    std::vector<std::unique_ptr<int>> v;

    for(int i = 0; i < 1000; ++i) {
        v.push_back(std::unique_ptr<int>(new int));
    }
}

http://ideone.com/dyF6JI

std::vectorコピー コンストラクターを使用すると、このコードはコンパイルされません。

答えが「コンストラクターの移動」である場合、コンパイラーはこれを使用する必要があることをどのように認識しますか?

std::vector使用できますstd::move

使用するstd::moveがムーブ コンストラクターがない場合は、コピー コンストラクターを使用するのと同じです。

于 2013-06-09T14:23:22.173 に答える