#include <memory>
#include <iostream>
class A{
public:
~A() {
std::cout << "destroy A" << std::endl;
}
int a;
};
int main() {
std::shared_ptr<A> a(new A());
std::shared_ptr<A> b = a;
std::cout << "use count"<< a.use_count() << std::endl;
std::cout << "use count"<< b.use_count() << std::endl;
a.reset();
std::cout << "use count"<< a.use_count() << std::endl;
std::cout << "use count"<< b.use_count() << std::endl;
if(a == nullptr)
std::cout << "a is nullptr" << std::endl;
else
std::cout << "a is not nullptr" << std::endl;
if(b == nullptr)
std::cout << "b is nullptr" << std::endl;
else
std::cout << "b is not nullptr" << std::endl;
}
运行结果
use count2
use count2
use count0
use count1
a is nullptr
b is not nullptr
destroy A
总结:
- b=a; 指针a和指针b的use_count都等于2;
- 执行a.reset()后,虽然指针a所指向的内存还在,但是指针a本身已经为空了,所以它的use_count也为0;
- 执行a.reset()后,指针b的use_count变为1;