#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class Story
{
int n;
public :
Story( int n) : n( n) { cout << "story #" << n << " created" << endl; }
~Story( ) { cout << "story #" << n << " destroyed" << endl; }
} ;
int main( )
{
vector< shared_ptr< Story>> list1, list2;
cout << "creating #1 and adding to first list" << endl;
list1.emplace_back ( make_shared< Story> ( 1 ) ) ;
cout << "copying #1 to second list" << endl;
list2.push_back ( list1[ 0 ] ) ;
cout << "creating #2" << endl;
auto story2 = make_shared< Story> ( 2 ) ;
cout << "adding #2 to the second list" << endl;
list2.push_back ( story2) ;
cout << "removing first ptr to story #2" << endl;
story2 = nullptr;
cout << "removing second ptr to story #2, now it will be destroyed" << endl;
list2.resize ( 1 ) ;
cout << "clearing first list" << endl;
list1.clear ( ) ;
cout << "clearing second list, now story #1 will be destroyed" << endl;
list2.clear ( ) ;
cout << "done" << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU3RvcnkKewoJaW50IG47CnB1YmxpYzoKICAgIFN0b3J5KGludCBuKTogbihuKSB7IGNvdXQgPDwgInN0b3J5ICMiIDw8IG4gPDwgIiBjcmVhdGVkIiA8PCBlbmRsOyB9CiAgICB+U3RvcnkoKSB7IGNvdXQgPDwgInN0b3J5ICMiIDw8IG4gPDwgIiBkZXN0cm95ZWQiIDw8IGVuZGw7IH0KfTsKCmludCBtYWluKCkKewoJdmVjdG9yPHNoYXJlZF9wdHI8U3Rvcnk+PiBsaXN0MSwgbGlzdDI7CgoJY291dCA8PCAiY3JlYXRpbmcgIzEgYW5kIGFkZGluZyB0byBmaXJzdCBsaXN0IiA8PCBlbmRsOwoJbGlzdDEuZW1wbGFjZV9iYWNrKG1ha2Vfc2hhcmVkPFN0b3J5PigxKSk7Cgljb3V0IDw8ICJjb3B5aW5nICMxIHRvIHNlY29uZCBsaXN0IiA8PCBlbmRsOwoJbGlzdDIucHVzaF9iYWNrKGxpc3QxWzBdKTsKCWNvdXQgPDwgImNyZWF0aW5nICMyIiA8PCBlbmRsOwoJYXV0byBzdG9yeTIgPSBtYWtlX3NoYXJlZDxTdG9yeT4oMik7Cgljb3V0IDw8ICJhZGRpbmcgIzIgdG8gdGhlIHNlY29uZCBsaXN0IiA8PCBlbmRsOwoJbGlzdDIucHVzaF9iYWNrKHN0b3J5Mik7Cgljb3V0IDw8ICJyZW1vdmluZyBmaXJzdCBwdHIgdG8gc3RvcnkgIzIiIDw8IGVuZGw7CglzdG9yeTIgPSBudWxscHRyOwoJY291dCA8PCAicmVtb3Zpbmcgc2Vjb25kIHB0ciB0byBzdG9yeSAjMiwgbm93IGl0IHdpbGwgYmUgZGVzdHJveWVkIiA8PCBlbmRsOwoJbGlzdDIucmVzaXplKDEpOwoJY291dCA8PCAiY2xlYXJpbmcgZmlyc3QgbGlzdCIgPDwgZW5kbDsKCWxpc3QxLmNsZWFyKCk7Cgljb3V0IDw8ICJjbGVhcmluZyBzZWNvbmQgbGlzdCwgbm93IHN0b3J5ICMxIHdpbGwgYmUgZGVzdHJveWVkIiA8PCBlbmRsOwoJbGlzdDIuY2xlYXIoKTsKCWNvdXQgPDwgImRvbmUiIDw8IGVuZGw7Cn0=