问题描述
我看到一些文章指出,由于在dll之间传递STL和shared_ptr是不安全的,
- 可能导致内存损坏和
- 它们可能具有不同的C ++运行时实现,因此会导致未定义的行为。
问题1:如果我使用相同的编译器版本和标志来编译两个库,这是真的吗?考虑到C ++运行时是相同的,并且通常从调用进程的虚拟地址空间为dll分配内存,而这两点仍然有效。
问题2:我看到的解决方案涉及在堆上的一个dll中创建对象,并传递一个自定义析构函数,该析构函数在smart_ptr创建时将其清除并传递,以便可以从创建它的第二个第一个dll中安全地删除它当参考丢失时。什么时候需要?这不是ABI稳定的吗?这不是仅需要dll在其自己的地址空间中创建对象,并且您不希望其他dll从其中删除吗?那不是默认值吗?
问题3:这是否与使用不同编译器版本构建的静态库相互交谈一样?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)