43 lines
720 B
C++
43 lines
720 B
C++
//
|
|
// Created by light on 19-12-22.
|
|
//
|
|
|
|
// rvo example
|
|
|
|
#include <iostream>
|
|
|
|
using namespace std;
|
|
|
|
// Can copy and move
|
|
class A {
|
|
public:
|
|
A() { cout << "Create A\n"; }
|
|
|
|
~A() { cout << "Destroy A\n"; }
|
|
|
|
A(const A &) { cout << "Copy A\n"; }
|
|
|
|
A(A &&) { cout << "Move A\n"; }
|
|
|
|
A &operator=(const A &a) {
|
|
std::cout << "copy assignment" << std::endl;
|
|
return *this;
|
|
}
|
|
|
|
A &operator=(A &&a) {
|
|
cout << "move assignment\n";
|
|
return *this;
|
|
}
|
|
};
|
|
|
|
// 编译器可以优化 返回值移动出去
|
|
A getA_unnamed() { return A(); }
|
|
|
|
int main() {
|
|
// cout<<"构造"<<endl;
|
|
// auto a = getA_unnamed();
|
|
cout << "赋值" << endl;
|
|
A aa;
|
|
aa = getA_unnamed();
|
|
// aa=std::move(getA_unnamed());
|
|
} |