将shared_ptr传递给共享对象/ dll

时间:2016-02-25 09:03:32

标签: c++ c++11

假设我将方法std::shared_ptr中的func传递给so / dll函数dll_func,后者又将其推送到私有dll向量中。

然后dll_func返回,func也会返回,因此dll向量中的std::shared_ptr是唯一的std::shared_ptr实例。

如果稍后在dll上清除向量,那么其中的std::shared_ptr将被dll或最初创建std::shared_ptr的调用程序解除分配?

1 个答案:

答案 0 :(得分:0)

std::shared_ptr将被创建时用作删除器的任何函数删除。如果该函数在dll中,则将使用该函数;如果函数在exe中,那么那个。假设您使用默认的delete,那么标准库运行时::operator delete将清除它,但它将从dll中的代码中调用(假设未覆盖全局)。

更重要的是,在跨dll边界共享对象时,是否使用相同的编译器和编译器选项?如果是这样,那么它应该按预期工作。如果没有,不要以这种方式共享对象,不能保证二进制兼容性。

为清楚起见;

  

如果在没有删除器的exe中创建std::shared_ptr(因此使用默认值),如果在exe中删除了最后一个实例,则dll将调用从exe调用的相同删除器?

是的,采用二进制兼容性。