- #include <iostream> 
- #include <memory> 
- using namespace std; 
-   
- class B { 
- public:  
- 	virtual void Bar() { cout << "B::Bar()"<<endl; } 
- 	virtual ~B() { cout << "B destroyed"<<endl; } 
- };  
- class BB:public B{ 
- public:  
- 	void Bar() override { cout << "BB::Bar()"<<endl; } 
- 	~BB() { cout << "BB destroyed"<<endl; } 
- }; 
-   
- class A 
- { 
-   private: 
-     unique_ptr<B> _b; 
-   public: 
-     template<class T>A(const T&b): _b(make_unique<T>(b)) { } 
-   
-     void Foo() 
-     { 
-         _b->Bar(); 
-     } 
- }; 
-   
- int main() { 
- 	{ 
- 		B b;  
- 		A a{b};  
- 		a.Foo(); 
- 	} 
- 	{ 
- 		BB bb; 
- 		A aa{bb}; 
- 		aa.Foo();  
- 	} 
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQiB7CnB1YmxpYzogCgl2aXJ0dWFsIHZvaWQgQmFyKCkgeyBjb3V0IDw8ICJCOjpCYXIoKSI8PGVuZGw7IH0KCXZpcnR1YWwgfkIoKSB7IGNvdXQgPDwgIkIgZGVzdHJveWVkIjw8ZW5kbDsgfQp9OyAKY2xhc3MgQkI6cHVibGljIEJ7CnB1YmxpYzogCgl2b2lkIEJhcigpIG92ZXJyaWRlIHsgY291dCA8PCAiQkI6OkJhcigpIjw8ZW5kbDsgfQoJfkJCKCkgeyBjb3V0IDw8ICJCQiBkZXN0cm95ZWQiPDxlbmRsOyB9Cn07CgpjbGFzcyBBCnsKICBwcml2YXRlOgogICAgdW5pcXVlX3B0cjxCPiBfYjsKICBwdWJsaWM6CiAgICB0ZW1wbGF0ZTxjbGFzcyBUPkEoY29uc3QgVCZiKTogX2IobWFrZV91bmlxdWU8VD4oYikpIHsgfQoKICAgIHZvaWQgRm9vKCkKICAgIHsKICAgICAgICBfYi0+QmFyKCk7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKCXsKCQlCIGI7IAoJCUEgYXtifTsgCgkJYS5Gb28oKTsKCX0KCXsKCQlCQiBiYjsKCQlBIGFhe2JifTsKCQlhYS5Gb28oKTsgCgl9CglyZXR1cm4gMDsKfQ==