gpt4 book ai didi

c++ - 库应该使用使用智能指针的接口(interface)吗?

转载 作者:可可西里 更新时间:2023-11-01 16:40:07 25 4
gpt4 key购买 nike

我开始编写一个库并考虑它的接口(interface)。以前我写的库都使用原始指针(内部和接口(interface)),现在我想试试 VS2010 自带的智能指针库。

  1. 接口(interface)应该使用智能指针吗? (可能会迫使图书馆用户也使用智能指针?)
  2. 如果接口(interface)使用原始指针而库在内部使用智能指针,会不会很困惑? (甚至可能吗?shared_ptr 没有 release() 方法...)
  3. 两个兼容 c++0x 的智能指针库(比如 boost 和 VS2010)可以互换使用吗? (假设我使用 VS2010 编写我的库,用户使用 boost)

请帮忙:)

最佳答案

如果不深入了解您的设计原则以及您希望如何使用该库,就不可能回答这些问题。

所以我只能根据我的经验以及我喜欢如何使用我的库来回答。

  1. 是的。
  2. 是的。不要这样做。
  3. 混合它们可能不是一个好主意(虽然我从未尝试过)。
    但你可以弥补这一点:
    由于大多数开放源代码都是作为源代码分发的,因此您可以构建自己的源代码,以便将其配置为在许多环境中使用。

例如:

#if   defined(MY_PROJ_SHARED_PTR_FROM_BOOST)

#include <boost/shared_ptr.hpp>
#define MY_PROJ_SHARED_PTR_NAMESPACE boost

#elif defined(MY_PROJ_SHARED_PTR_FROM_STD)

#include <memory>
#define MY_PROJ_SHARED_PTR_NAMESPACE std

#elif defined(MY_PROJ_SHARED_PTR_FROM_TR1)

#include <tr1/memory>
#define MY_PROJ_SHARED_PTR_NAMESPACE std::tr1

#else
#error "MY_PROJ_SHARED_PTR_FROM_<XXX> not defined correctly"
#endif


namespace X
{
using ::MY_PROJ_SHARED_PTR_NAMESPACE::shared_ptr;
}


int main()
{
X::shared_ptr<int> data;
}

我相信还有其他方法可以做到这一点。
但是已经晚了。

关于c++ - 库应该使用使用智能指针的接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3589511/

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