在nullptr上调用了shared_ptr <void>析构函数

问题描述

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

  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。我的问题是:为什么共享指针的行为如此?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...