1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#include <iostream>
using namespace std;
class Demo
{
public:
Demo() = default;
Demo(Demo const &other)
{
cout << "Copy constructor\n";
}
Demo(Demo &&tmp)
{
cout << "Move constructor\n";
}
Demo &operator+=(Demo const &rhs)
{
cout << "Copy +=\n";
Demo tmp(*this);
// add rhs to tmp
// swap tmp
cout << "copy += returns\n";
return *this;
}
};
Demo operator+(Demo &&lhs, Demo const &rhs)
{
cout << "move operator+\n";
lhs += rhs;
cout << "move operator+ returns\n";
return std::move(lhs);
}
Demo operator+(Demo const &lhs, Demo const &rhs)
{
cout << "copy operator+\n";
Demo tmp(lhs);
tmp += rhs;
cout << "copy operator+ returns\n";
return tmp;
}
int main()
{
Demo d1;
d1 + d1 + d1;
cout << "========\n";
Demo{} + d1 + d1;
}
|