#include <iostream>
#include <memory>
class Tmp {
public:
Tmp(int a);
~Tmp();
void print__a() { std::cout << "value = " << __a << std::endl; }
private:
int __a;
};
Tmp::Tmp(int a) : __a(a) {
std::cout << "start" << __a << std::endl;
}
Tmp::~Tmp() {
std::cout << "finish" << __a << std::endl;
}
int main() {
std::shared_ptr<Tmp> sp; // empty
Tmp *xx = new Tmp(10);
sp.reset(xx); // takes ownership of pointer
sp->print__a();
std::cout << "============11" << std::endl;
Tmp *tt = new Tmp(20);
sp.reset(tt); // takes ownership of pointer
sp->print__a();
std::cout << "============22" << std::endl;
sp.reset(); // deletes managed object
// sp->print__a(); //crash
if (!sp.get()) {
printf("empty\n");
}
return 0;
}
打印结果:
start10
value = 10
============11
start20
finish10
value = 20
============22
finish20
empty
- 所以reset()就是把shared_ptr赋空,reset(new Tmp(10)); 就是把shared_ptr 指向new Tmp(10)