Ссылка на C ++ 11 также вызывает конструктор копирования

Я тестировал некоторые функции C ++ 11 из некоторых. Я наткнулся на ссылки r-значения и конструкторы перемещения.

Я реализовал свой первый конструктор перемещения, вот он:

#include <iostream>
#include <vector>
using namespace std;

class TestClass{

public:
    TestClass(int s):
        size(s), arr(new int[s]){
    }
    ~TestClass(){
        if (arr)
            delete arr;
    }
    // copy constructor
    TestClass(const TestClass& other):
            size(other.size), arr(new int[other.size]){
        std::copy(other.arr, other.arr + other.size, arr);
    }

    // move constructor
    TestClass(TestClass&& other){
        arr=other.arr;
        size=other.size;

        other.arr=nullptr;
        other.size=0;
    }

private:
    int size;
    int * arr;
};

int main(){
    vector<TestClass> vec;

    clock_t start=clock();
    for(int i=0;i<500000;i++){
        vec.push_back(TestClass(1000));
    }
    clock_t stop=clock();
    cout<<stop-start<<endl;

    return 0;
}

Код работает отлично. В любом случае, помещая std :: cout в конструктор копирования, я заметил, что он вызывается! И много раз .. (переместите конструктор 500000 раз, скопируйте конструктор 524287 раз).

Что меня больше всего удивило, так это то, что если я закомментирую конструктор копирования из кода, вся программа станет намного быстрее, и на этот раз конструктор перемещения будет вызываться 1024287 раз.

Любая подсказка?

Ответы на вопрос(4)

Ваш ответ на вопрос