← index
cplusplus11.Examples/rvalue/rvalue3.cpp
Source: cplusplus11.Examples/rvalue/rvalue3.cpp
#include<iostream>
#include<vector>
#include<chrono>

class Container {
public:
    Container() = default;
    Container(std::initializer_list<int> values) : total(values) {}
    Container(const Container &c) {
        std::cout << "Used &\n";
        total = c.total;
    }
    
    // RValue Reference
    Container(Container &&c) {
        std::cout << "Used &&\n";
        total = std::move(c.total);
    }
    
    void add(std::initializer_list<int> values) {
        for(auto &i : values) {
            total.push_back(i);
        }
    }
    
    void printValues() {
        for(auto &i : total) std::cout << i << ", ";
        std::cout << "\n";
    }
    
protected:
    std::vector<int> total;
};


int main(void) {
    using namespace std;
    
    std::cout << "Fill vector with values..\n";
    
    Container c = {0, 1, 2, 0, 4 , 25, 6};

    for(unsigned int i = 0; i < 25000; ++i)
        c.add({255, 255, 0, 255, 1024, 2048});
    
    
    auto n1 = chrono::high_resolution_clock::now();
    
    Container values(std::move(c));
    
    auto n2 = chrono::high_resolution_clock::now();
    
    std::cout << "Move operation took " << chrono::duration_cast<chrono::nanoseconds>(n2-n1).count() << " nanoseconds.\n";
    
    auto n3 = chrono::high_resolution_clock::now();
    
    Container copied_values(values);
    
    auto n4 = chrono::high_resolution_clock::now();
    
    std::cout << " Copy operation took: " << chrono::duration_cast<chrono::nanoseconds>(n4-n3).count() << " nanoseconds.\n";
    
    return 0;
}