我们有一个C++库,可以提供给几个不同的客户端。最近,我们从在公共接口中使用原始指针改为使用boost::sharedptr。正如您可能猜到的,这提供了一个巨大的好处,因为现在客户端不再需要担心谁需要删除什么以及何时删除。当我们进行转换时,我认为这是正确的做法,但让我感到困扰的是,我们必须在公共界面中包含来自第三方库的东西-通常情况下,如果可以的话,你可以避免这种事情。我解释说,boost现在实际上是C++语言的一部分,我们的用例要求客户端代码和库都包含指向对象的指针。然而,最近我们的一个客户问我们是否可以在接口中使用中立的智能指针类,因为我们的库本质上是迫使他们使用特定版本的boost-这一点我当然理解和欣赏。所以现在我想知道最好的行动方案是什么。我考虑了一下,想创建一个简单的智能指针类,简单地保存一个真正的boost智能指针。但是客户端可能会立即将其中的一个添加到他们的boost::sharedptr中,然后我们就会有三个共享指针深度--这可能会有问题,也可能不会。无论如何,我很想听听社区对解决这个问题的最好方法的一些意见。
编辑:我最初说的是所有权转移,但我应该指定API边界两侧的代码需要持有指向对象的指针。
发布于 2008-12-02 20:46:20
随着TR1的发布,shared_ptr<>是该语言的一部分。请参阅:(TR1)
发布于 2008-12-02 21:07:08
一个可能的解决方案是将boost::shared_ptr与您的项目一起发布。由于它全部由头文件组成,这将使您的客户端不必手动安装boost库。您可以使用bcp获取特定boost库所需的所有文件,包括库本身。当时我在一家公司工作,需要boost::shared_ptr,我就是这么做的,它确实很有效。
发布于 2008-12-02 20:40:37
如果语义真的是所有权转移,既然它是标准C++,为什么不使用auto_ptr呢?在内部,您仍然可以从auto_ptr构造shared _ptr,然后在需要时拥有共享所有权。
https://stackoverflow.com/questions/335330
复制相似问题