#include <iostream>
#include <vector>
struct A{
A(int id): id(id){
std::cout << id << ": constructing" << std::endl;
}
~A(){
auto &s = std::cout << id << ": destroying";
if (isCopy)
s << " a copy";
s << std::endl;
}
A(const A& a) : id(a.id), isCopy(true) {
std::cout << id << ": copy constructor" << std::endl;
}
private:
int id;
bool isCopy = false;
};
void Copy(){
std::cout << "Via copy" << std::endl;
std::vector<A> v;
v.reserve(3);
v.push_back(A(1));
v.push_back(A(2));
v.push_back(A(3));
}
void Move(){
std::cout << std::endl;
std::cout << "Via move" << std::endl;
std::vector<A> v;
v.reserve(3);
v.emplace_back(4);
v.emplace_back(5);
v.emplace_back(6);
}
int main(){
Copy();
Move();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IEF7CiAgICAgICAgQShpbnQgaWQpOiAgaWQoaWQpewogICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IGlkIDw8ICI6IGNvbnN0cnVjdGluZyIgPDwgc3RkOjplbmRsOwogICAgICAgIH0KCiAgICAgICAgfkEoKXsKICAgICAgICAgICAgICAgIGF1dG8gJnMgPSBzdGQ6OmNvdXQgPDwgaWQgPDwgIjogZGVzdHJveWluZyI7CiAgICAgICAgICAgICAgICBpZiAoaXNDb3B5KQogICAgICAgICAgICAgICAgICAgICAgICBzIDw8ICIgYSBjb3B5IjsKICAgICAgICAgICAgICAgIHMgPDwgc3RkOjplbmRsOwogICAgICAgIH0KCiAgICAgICAgQShjb25zdCBBJiBhKSA6IGlkKGEuaWQpLCBpc0NvcHkodHJ1ZSkgewogICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IGlkIDw8ICI6IGNvcHkgY29uc3RydWN0b3IiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CnByaXZhdGU6CiAgICAgICAgaW50IGlkOwogICAgICAgIGJvb2wgaXNDb3B5ID0gZmFsc2U7Cn07Cgp2b2lkIENvcHkoKXsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlZpYSBjb3B5IiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgc3RkOjp2ZWN0b3I8QT4gdjsKICAgICAgICB2LnJlc2VydmUoMyk7CiAgICAgICAgdi5wdXNoX2JhY2soQSgxKSk7CiAgICAgICAgdi5wdXNoX2JhY2soQSgyKSk7CiAgICAgICAgdi5wdXNoX2JhY2soQSgzKSk7Cn0KCnZvaWQgTW92ZSgpewogICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJWaWEgbW92ZSIgPDwgc3RkOjplbmRsOwogICAgICAgIHN0ZDo6dmVjdG9yPEE+IHY7CiAgICAgICAgdi5yZXNlcnZlKDMpOwogICAgICAgIHYuZW1wbGFjZV9iYWNrKDQpOwogICAgICAgIHYuZW1wbGFjZV9iYWNrKDUpOwogICAgICAgIHYuZW1wbGFjZV9iYWNrKDYpOwp9CgppbnQgbWFpbigpewogICAgICAgIENvcHkoKTsKICAgICAgICBNb3ZlKCk7CiAgICAgICAgcmV0dXJuIDA7Cn0K