#include <iostream>
#include <memory>
#include <vector>
int global;
class A {
public:
A(int i): a(i) {}
~A() {
std::cout << "delete A" << std::endl;
++global;
};
int foo() {
return a;
}
int a;
};
int main() {
int c = 0;
int loops = 10;
global = 0;
// Make vector of pointers
std::vector<std::shared_ptr<A> > vec;
for(int i = 0; i< 2; i++) {
vec.push_back( std::shared_ptr<A>(new A(i)) );
}
for(int i=0; i<loops; i++) {
for(auto & p : vec) {
c += p->foo();
}
}
std::cout << " deleted:" << global << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgoKCgppbnQgZ2xvYmFsOwoKY2xhc3MgQSB7CnB1YmxpYzoKICAgIEEoaW50IGkpOiBhKGkpIHt9CiAgICB+QSgpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgImRlbGV0ZSBBIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgKytnbG9iYWw7CiAgICB9OwogICAgaW50IGZvbygpIHsKICAgICAgICByZXR1cm4gYTsKICAgIH0KICAgIGludCBhOwp9OwoKCmludCBtYWluKCkgewoKCQogCQlpbnQgYyA9IDA7CiAJCWludCBsb29wcyA9IDEwOwogICAgICAgIGdsb2JhbCA9IDA7CiAgICAgICAgCiAgICAgICAgLy8gTWFrZSB2ZWN0b3Igb2YgcG9pbnRlcnMKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QT4gPiB2ZWM7CiAgICAgICAgZm9yKGludCBpID0gMDsgaTwgMjsgaSsrKSB7CiAgICAgICAgICAgIHZlYy5wdXNoX2JhY2soIHN0ZDo6c2hhcmVkX3B0cjxBPihuZXcgQShpKSkgICAgKTsKICAgICAgICB9CgogICAgICAgIGZvcihpbnQgaT0wOyBpPGxvb3BzOyBpKyspIHsKICAgICAgICAgICAgZm9yKGF1dG8gJiBwIDogdmVjKSB7CiAgICAgICAgICAgICAgICBjICs9IHAtPmZvbygpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHN0ZDo6Y291dCA8PCAiIGRlbGV0ZWQ6IiA8PCBnbG9iYWwgPDwgc3RkOjplbmRsOwoJCn0=