class a{
public:
~a(){cout<<"a"<<endl;
}
class b:public a{
public:
~b(){cout<<"b"<<endl;
}
void main(){
shared_ptr A;
{
shared_ptr B(new b());//智能指针内部,uses引用值为1
A = B; //智能指针内部,uses引用值为2,子类父类的智能指针可以一起计数
}
//离开作用域,B无效,引用值减一,为1
}
离开main作用域后,由于a中析构函数不是虚函数,在A析构时,按理说应该是执行~a()
但实际上,执行的却是b(),再由b()调用~a()
析构函数以外的普通函数,还是正常的,但是就析构函数会出现这种特殊现象,unique_ptr也正常
标签:函数,作用域,ptr,C++,虚析构,shared,public,指针 From: https://www.cnblogs.com/lxzbky/p/17352496.html