JZTXT
  • 首页
  • Ai
  • Java
  • Python
  • Android
  • Mysql
  • JavaScript
  • Html
  • CSS

C++ shared_ptr 虚析构函数 特殊

发布时间 2023-04-25 14:35:39作者: ecnu_lxz

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也正常

    本栏目推荐文章
  • 函数的参数类型
  • 【C语言】函数的递归调用
  • shared_ptr 循环引用以及解决办法
  • NUS CS1101S:SICP JavaScript 描述:一、使用函数构建抽象
  • asp.net mvc4 controller构造函数
  • 函数返回值
  • 10-函数进阶-作用域
  • 11-函数进阶-参数类型
  • 9-函数基础
  • vim中函数的跳转与回退
版权声明:本网站为非赢利性站点,本网站所有内容均来源于互联网相关站点自动搜索采集信息,相关链接已经注明来源。
联系我们