#include <stdlib.h>
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
class A {
public:
A() : i(100) {
std::cout << "in 构造" << endl;
}
virtual ~A() {
i = -1;
std::cout << "in 析构" << endl;
}
int i;
};
void test(){
std::cout << "into test()" << endl;
vector<shared_ptr<A> > v;
{
shared_ptr<A> ptrA_1(new A());
v.push_back(ptrA_1);
cout << "use count: " << v[0].use_count() << endl;
}
cout << "use count: " << v[0].use_count() << endl;
cout << v[0].get() << " " << v[0].get()->i << endl;
v.erase(v.begin());
cout << "use count: " << v[0].use_count() << endl;
if(v[0].get() == nullptr){
cout << "nullptr: " << endl;
}else{
cout << v[0].get() << " " << v[0].get()->i << endl;
}
std::cout << "leave from test()" << endl;
}
int main() {
test();
std::cout << "exit..." << endl;
return 0;
}
/*
into test()
in 构造
use count: 2
use count: 1
0x7fffeb1a5c30 100
in 析构
use count: 0
0x7fffeb1a5c30 -1
leave from test()
exit...
*/