#include <iostream>
using namespace std;
class Object
{
public :
Object( ) ;
} ;
class scoped_ptr
{
Object * pObj;
public :
scoped_ptr( Object * pObject) ;
scoped_ptr( const scoped_ptr& ptr) ;
scoped_ptr& operator= ( const scoped_ptr& ptr) ;
} ;
Object:: Object ( )
{
cout << "in constructor Object()" << endl;
}
scoped_ptr:: scoped_ptr ( Object * pObject) : pObj( pObject)
{
cout << "in constructor scoped_ptr(Object*)" << endl;
}
scoped_ptr:: scoped_ptr ( const scoped_ptr& ptr)
{
cout << "in constructor scoped_ptr(const scoped_ptr&)" << endl;
pObj = ptr.pObj ;
}
scoped_ptr& scoped_ptr:: operator = ( const scoped_ptr& ptr)
{
cout << "in scoped_ptr::operator=(const scoped_ptr&)" << endl;
pObj = ptr.pObj ;
return * this ;
}
int main( )
{
scoped_ptr p = new Object( ) ;
p = new Object( ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgT2JqZWN0CnsKcHVibGljOgogICAgT2JqZWN0KCk7Cn07CgpjbGFzcyBzY29wZWRfcHRyCnsKICAgIE9iamVjdCAqcE9iajsKcHVibGljOgogICAgc2NvcGVkX3B0cihPYmplY3QgKnBPYmplY3QpOwogICAgc2NvcGVkX3B0cihjb25zdCBzY29wZWRfcHRyJiBwdHIpOwogICAgc2NvcGVkX3B0ciYgb3BlcmF0b3I9KGNvbnN0IHNjb3BlZF9wdHImIHB0cik7Cn07CgpPYmplY3Q6Ok9iamVjdCgpCnsKICAgIGNvdXQgPDwgImluIGNvbnN0cnVjdG9yIE9iamVjdCgpIiA8PCBlbmRsOwp9CgpzY29wZWRfcHRyOjpzY29wZWRfcHRyKE9iamVjdCAqcE9iamVjdCkgOiBwT2JqKHBPYmplY3QpCnsKICAgIGNvdXQgPDwgImluIGNvbnN0cnVjdG9yIHNjb3BlZF9wdHIoT2JqZWN0KikiIDw8IGVuZGw7Cn0KCnNjb3BlZF9wdHI6OnNjb3BlZF9wdHIoY29uc3Qgc2NvcGVkX3B0ciYgcHRyKQp7CiAgICBjb3V0IDw8ICJpbiBjb25zdHJ1Y3RvciBzY29wZWRfcHRyKGNvbnN0IHNjb3BlZF9wdHImKSIgPDwgZW5kbDsKICAgIHBPYmogPSBwdHIucE9iajsKfQoKc2NvcGVkX3B0ciYgc2NvcGVkX3B0cjo6b3BlcmF0b3I9KGNvbnN0IHNjb3BlZF9wdHImIHB0cikKewogICAgY291dCA8PCAiaW4gc2NvcGVkX3B0cjo6b3BlcmF0b3I9KGNvbnN0IHNjb3BlZF9wdHImKSIgPDwgZW5kbDsKICAgIHBPYmogPSBwdHIucE9iajsKICAgIHJldHVybiAqdGhpczsKfQoKaW50IG1haW4oKQp7CiAgICBzY29wZWRfcHRyIHAgPSBuZXcgT2JqZWN0KCk7CiAgICBwID0gbmV3IE9iamVjdCgpOwogICAgcmV0dXJuIDA7Cn0=