#include <string>
#include <iostream>
class NonCopyable
{
public:
NonCopyable() = default;
virtual ~NonCopyable() = default;
NonCopyable(const NonCopyable &) = delete;
NonCopyable& operator =(NonCopyable const&) = delete;
NonCopyable(NonCopyable&&) = delete;
NonCopyable& operator=(NonCopyable&&) = delete;
};
class Application : public NonCopyable
{
public:
Application() = default;
Application(const Application& a) : NonCopyable(), x(a.x){}
~Application() { /* ...delete stuff... */ }
std::string x;
};
int main(){
Application a;
a.x = "Hello";
Application b(a);
std::cout << b.x << std::endl;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgTm9uQ29weWFibGUKewpwdWJsaWM6CiAgICBOb25Db3B5YWJsZSgpID0gZGVmYXVsdDsKICAgIHZpcnR1YWwgfk5vbkNvcHlhYmxlKCkgPSBkZWZhdWx0OwogICAgTm9uQ29weWFibGUoY29uc3QgTm9uQ29weWFibGUgJikgPSBkZWxldGU7CiAgICBOb25Db3B5YWJsZSYgb3BlcmF0b3IgPShOb25Db3B5YWJsZSBjb25zdCYpID0gZGVsZXRlOwogICAgTm9uQ29weWFibGUoTm9uQ29weWFibGUmJikgPSBkZWxldGU7CiAgICBOb25Db3B5YWJsZSYgb3BlcmF0b3I9KE5vbkNvcHlhYmxlJiYpID0gZGVsZXRlOwp9OwoKY2xhc3MgQXBwbGljYXRpb24gOiBwdWJsaWMgTm9uQ29weWFibGUKewpwdWJsaWM6CiAgICBBcHBsaWNhdGlvbigpID0gZGVmYXVsdDsKICAgIEFwcGxpY2F0aW9uKGNvbnN0IEFwcGxpY2F0aW9uJiBhKSA6IE5vbkNvcHlhYmxlKCksIHgoYS54KXt9CiAgICB+QXBwbGljYXRpb24oKSB7IC8qIC4uLmRlbGV0ZSBzdHVmZi4uLiAqLyB9CiAgICBzdGQ6OnN0cmluZyB4Owp9OwoKaW50IG1haW4oKXsKICAgQXBwbGljYXRpb24gYTsKICAgYS54ID0gIkhlbGxvIjsKICAgCiAgIEFwcGxpY2F0aW9uIGIoYSk7CiAgIAogICBzdGQ6OmNvdXQgPDwgYi54IDw8IHN0ZDo6ZW5kbDsKCQp9