#include <iostream>
#include <vector>
#include <memory>
#include <algorithm>
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, list3, list4;
auto story1 = make_shared<Story>(1);
auto story2 = make_shared<Story>(2);
list1.push_back(story1); list1.push_back(story2);
list2.push_back(story2); list1.push_back(story1);
list3.push_back(story1);
list4.push_back(story2);
list1.erase(remove(begin(list1), end(list1), story1), end(list1));
list2.erase(remove(begin(list2), end(list2), story1), end(list2));
list3.erase(remove(begin(list3), end(list3), story1), end(list3));
list4.erase(remove(begin(list4), end(list4), story1), end(list4));
story1 = nullptr; // story1 -- тоже указатель на объект
cout << "story1 should be destroyed here" << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU3RvcnkKewogICAgaW50IG47CnB1YmxpYzoKICAgIFN0b3J5KGludCBuKTogbihuKSB7IGNvdXQgPDwgInN0b3J5ICMiIDw8IG4gPDwgIiBjcmVhdGVkIiA8PCBlbmRsOyB9CiAgICB+U3RvcnkoKSB7IGNvdXQgPDwgInN0b3J5ICMiIDw8IG4gPDwgIiBkZXN0cm95ZWQiIDw8IGVuZGw7IH0KfTsKCmludCBtYWluKCkKewogICAgdmVjdG9yPHNoYXJlZF9wdHI8U3Rvcnk+PiBsaXN0MSwgbGlzdDIsIGxpc3QzLCBsaXN0NDsKCiAgICBhdXRvIHN0b3J5MSA9IG1ha2Vfc2hhcmVkPFN0b3J5PigxKTsKICAgIGF1dG8gc3RvcnkyID0gbWFrZV9zaGFyZWQ8U3Rvcnk+KDIpOwoKICAgIGxpc3QxLnB1c2hfYmFjayhzdG9yeTEpOyBsaXN0MS5wdXNoX2JhY2soc3RvcnkyKTsKICAgIGxpc3QyLnB1c2hfYmFjayhzdG9yeTIpOyBsaXN0MS5wdXNoX2JhY2soc3RvcnkxKTsKICAgIGxpc3QzLnB1c2hfYmFjayhzdG9yeTEpOwogICAgbGlzdDQucHVzaF9iYWNrKHN0b3J5Mik7CgogICAgbGlzdDEuZXJhc2UocmVtb3ZlKGJlZ2luKGxpc3QxKSwgZW5kKGxpc3QxKSwgc3RvcnkxKSwgZW5kKGxpc3QxKSk7CiAgICBsaXN0Mi5lcmFzZShyZW1vdmUoYmVnaW4obGlzdDIpLCBlbmQobGlzdDIpLCBzdG9yeTEpLCBlbmQobGlzdDIpKTsKICAgIGxpc3QzLmVyYXNlKHJlbW92ZShiZWdpbihsaXN0MyksIGVuZChsaXN0MyksIHN0b3J5MSksIGVuZChsaXN0MykpOwogICAgbGlzdDQuZXJhc2UocmVtb3ZlKGJlZ2luKGxpc3Q0KSwgZW5kKGxpc3Q0KSwgc3RvcnkxKSwgZW5kKGxpc3Q0KSk7CiAgICAKICAgIHN0b3J5MSA9IG51bGxwdHI7IC8vIHN0b3J5MSAtLSDRgtC+0LbQtSDRg9C60LDQt9Cw0YLQtdC70Ywg0L3QsCDQvtCx0YrQtdC60YIKICAgIGNvdXQgPDwgInN0b3J5MSBzaG91bGQgYmUgZGVzdHJveWVkIGhlcmUiIDw8IGVuZGw7Cn0=