库应该使用使用智能指针的接口吗?

twf*_*twf 9 c++ smart-pointers

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

  1. 界面应该使用智能指针吗?(可能强迫库用户也使用智能指针?)
  2. 如果接口使用原始指针但是库内部使用智能指针会不会很麻烦?(它甚至可能吗?shared_ptr没有release()方法......)
  3. 两个符合c ++ 0x的智能指针库(比如boost和VS2010)可以互换使用吗?(假设我使用VS2010编写我的库,用户使用boost)

请帮忙 :)

Mar*_*ork 5

如果不了解更多关于您的设计原则以及您希望如何使用库,那么回答这些问题是不可能的.

所以我只能根据自己的经验以及我喜欢使用的库来回答.

  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;
}
Run Code Online (Sandbox Code Playgroud)

我相信还有其他方法可以做到这一点.
但现在已经很晚了.