T
が可動オブジェクトであると仮定しましょう:
vector<T> v;
v.resize(...)
再割り当てが必要な場合、そのコードはコピーを呼び出すか、すべての要素のコンストラクターを移動しますか?
答えが「コンストラクターの移動」である場合、コンパイラーはこれを使用する必要があることをどのように認識しますか?
T
が可動オブジェクトであると仮定しましょう:
vector<T> v;
v.resize(...)
再割り当てが必要な場合、そのコードはコピーを呼び出すか、すべての要素のコンストラクターを移動しますか?
答えが「コンストラクターの移動」である場合、コンパイラーはこれを使用する必要があることをどのように認識しますか?
#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));
}
}
std::vector
コピー コンストラクターを使用すると、このコードはコンパイルされません。
答えが「コンストラクターの移動」である場合、コンパイラーはこれを使用する必要があることをどのように認識しますか?
std::vector
使用できますstd::move
使用するstd::move
がムーブ コンストラクターがない場合は、コピー コンストラクターを使用するのと同じです。