经常在调用三方接口的时候,难免不混用智能指针和普通指针。
混用主要分为两类型:
把已有的普通指针交给智能指针管理
int* p_chamo;
std::shared_ptr<int> p;
p.reset(p_chamo)
把已有智能指针管理的地址拿出来给其他程序用
std::shared_ptr<int> p=std::make_shared<int>(1);
int* p_chamo=p.get();
只要出现了这两种情况,就必须认为的关注两者的释放。
典型问题场景1:智能指针在花括号内定义
int* p_chamo;
if(true){
std::shared_ptr<int> p;
p.reset(p_chamo)
}
典型问题场景2:普通指针在花括号内定义
std::shared_ptr<int> p;
if(true){
int p_chamo;
p.reset(&p_chamo);
}