gpt4 book ai didi

dll - 在 DLL 接口(interface)中使用 boost::shared ptr 可以吗?

转载 作者:行者123 更新时间:2023-12-04 03:10:02 36 4
gpt4 key购买 nike

在 C++ 中开发一个返回 boost 共享指针并将它们用作参数的 DLL 是否有效?

那么,这样导出函数可以吗?

1.) boost::shared_ptr<Connection> startConnection();
2.) void sendToConnection(boost::shared_ptr<Connection> conn, byte* data, int len);

特别是:引用计数是否跨 DLL 边界工作,或者要求 exe 和 dll 使用相同的运行时?

目的是克服对象所有权的问题。因此,当 dll 和 exe 不再引用它时,该对象将被删除。

最佳答案

根据有效 C++(第 3 版)中的 Scott Meyers,shared_ptrs 跨 dll 边界是安全的。 shared_ptr 对象从创建它的 dll 中保存指向析构函数的指针。

In his book in Item 18 he states, "An especially nice feature of tr1::shared_ptr is that it automatically uses its per-pointer deleter to eliminate another potential client error, the "cross-DLL problem." This problem crops up when an object is created using new in one dynamically linked library (DLL) but is deleted in a different DLL. On many platforms, such cross-DLL new/delete pairs lead to runtime errors. tr1::shared_ptr avoid the problem, because its default deleter uses delete from the same DLL where the tr1::shared_ptr is created."



不过,蒂姆·莱舍 (Tim Lesher) 提到了一个有趣的问题,他提到了 here .您需要确保在 shared_ptr 最终超出范围之前未卸载创建 shared_ptr 的 DLL。我想说,在大多数情况下,这不是您必须注意的事情,但如果您正在创建松散耦合的 dll,那么我建议您不要使用 shared_ptr。

另一个潜在的缺点是确保双方都是使用兼容版本的 boost 库创建的。 Boost 的 shared_ptr 已经稳定了很长时间。至少从 1.34 开始它与 tr1 兼容。

关于dll - 在 DLL 接口(interface)中使用 boost::shared ptr 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1958643/

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