问题描述
我有一段简单的代码可以加载共享库
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 (将#修改为@)