首页 > 解决方案 > shared_ptr在 nullptr 上调用的析构函数

问题描述

我有一段简单的代码来加载共享库

  std::shared_ptr<void> hnld;
  hnld.reset( dlopen("libFoo.so", RTLD_NOW),dlclose);
  if(!hnld){
    std::cout << "Failed to load. "<< std::endl;
  }

加载库后,一切正常,但如果失败,则会显示消息,但是在调用析构函数时代码会崩溃dlclose,这是预期的对象无效。假!hnld的,不应该知道不应该调用析构函数的智能指针吗?

注意我知道如何通过使用另一个析构函数来解决这个问题,该析构函数nullptr在调用dlclose. 我的问题是:为什么共享指针会这样?

标签: c++shared-ptr

解决方案


推荐阅读