gpt4 book ai didi

c++ - 将 shared_ptr 传递给共享对象/dll

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:47:33 30 4
gpt4 key购买 nike

假设我将一个 std::shared_ptr 从一个方法 func 传递给一个 so/dll 函数 dll_func,这又将它插入私有(private) dll vector 。

然后dll_func返回,func也返回,这样dll vector 中的std::shared_ptr是唯一的std::shared_ptr 实例。

如果稍后 dll 清除 vector ,其中的 std::shared_ptr 将由 dll 或最初创建 std::shared_ptr 的调用程序释放>?

最佳答案

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

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

为清楚起见;

If the std::shared_ptr was created in the exe with no deleter (thus with the default one), the dll will call the same deleter that would have been called from the exe if the last instance was deleted in the exe?

是的,但是假定二进制兼容性。

关于c++ - 将 shared_ptr 传递给共享对象/dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35622644/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com