#include <iostream>
struct TestClass
{
TestClass()
{
std::cout << "Instance has been constructed" << std::endl;
}
TestClass(const TestClass &from)
{
std::cout << "Copy has been constructed" << std::endl;
}
TestClass &operator=(const TestClass &from)
{
std::cout << "Assignment" << std::endl;
}
~TestClass()
{
std::cout << "Instance has been destructed" << std::endl;
}
};
void Do1(TestClass t)
{
}
void Do2(TestClass &t)
{
}
int main()
{
std::cout << "Start of main" << std::endl;
TestClass test;
std::cout << "Do1:" << std::endl;
Do1(test);
std::cout << "Do2:" << std::endl;
Do2(test);
std::cout << "End of main" << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFRlc3RDbGFzcwp7CiAgICBUZXN0Q2xhc3MoKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiSW5zdGFuY2UgaGFzIGJlZW4gY29uc3RydWN0ZWQiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIFRlc3RDbGFzcyhjb25zdCBUZXN0Q2xhc3MgJmZyb20pCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJDb3B5IGhhcyBiZWVuIGNvbnN0cnVjdGVkIiA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICBUZXN0Q2xhc3MgJm9wZXJhdG9yPShjb25zdCBUZXN0Q2xhc3MgJmZyb20pCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJBc3NpZ25tZW50IiA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICB+VGVzdENsYXNzKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkluc3RhbmNlIGhhcyBiZWVuIGRlc3RydWN0ZWQiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCnZvaWQgRG8xKFRlc3RDbGFzcyB0KQp7Cn0Kdm9pZCBEbzIoVGVzdENsYXNzICZ0KQp7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpjb3V0IDw8ICJTdGFydCBvZiBtYWluIiA8PCBzdGQ6OmVuZGw7CiAgICBUZXN0Q2xhc3MgdGVzdDsKICAgIHN0ZDo6Y291dCA8PCAiRG8xOiIgPDwgc3RkOjplbmRsOwogICAgRG8xKHRlc3QpOwogICAgc3RkOjpjb3V0IDw8ICJEbzI6IiA8PCBzdGQ6OmVuZGw7CiAgICBEbzIodGVzdCk7CiAgICBzdGQ6OmNvdXQgPDwgIkVuZCBvZiBtYWluIiA8PCBzdGQ6OmVuZGw7Cn0=