class Test{
public:
static int count;
public:
Test() = default;
Test(int s);
Test(const Test& test) = delete;
Test(Test&& test);
Test& operator = (const Test& test) = delete;
Test& operator = (Test&& test);
~Test();
private:
int size;
int* ptr;
};
Test::Test(int s){
size = s;
ptr = new int[s];
count++;
}
Test::Test(Test&& test):ptr(test.ptr), size(test.size){
cout << "move copy constructor is called\n";
}
Test& Test::operator = (Test&& test){
if (this == &test){
return *this;
}
if (ptr != nullptr){
delete [] ptr;
ptr = nullptr;
}
size = test.size;
ptr = test.ptr;
test.ptr = nullptr;
return *this;
}
Test::~Test(){
delete[] ptr;
}
int Test::count = 0;
vector<Test> vec;
void func_test(vector<Test>&& other){
//vector<Test> vec;
vec.push_back(std::move(other[0]));
}
int main(int argc, const char * argv[]) {
// insert code here...
std::list<double> l = {2,1,421.2,-2,53,4,1234,14,11345,12,43,1.1};
vector<Test> vec;
vector<Test> vec1;
vec1.push_back(move(Test(1)));
func_test(move(vec1));
//auto ans = quick_sort(l);
return 0;
}
當把func_test的入參改為const vector<Test>& other,下面的vec.push_back會呼叫Test的拷貝建構式,沒改之前呼叫的是移動建構式,請問這是什么原因
uj5u.com熱心網友回復:
這就是完美轉發啊void push_back(const _Ty& _Val) { // insert element at end, provide strong guarantee
emplace_back(_Val);
}
void push_back(_Ty&& _Val) { // insert by moving into element at end, provide strong guarantee
emplace_back(_STD move(_Val));
}
uj5u.com熱心網友回復:
那要怎樣改才能在func_test函式入參為萬能參考時,push_back呼叫移動建構式呢
uj5u.com熱心網友回復:
你首先要明白何為移動何為拷貝?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/244941.html
標籤:C++ 語言
