c++ - 是否有像 auto_ptr 和 shared_ptr 这样不需要 C++0x 的通用智能指针?

标签 c++ shared-ptr smart-pointers

我想要一个非引用计数的智能指针,它可以结合 auto_ptrshared_ptr 的一些有用方面。我认为 C++0x 的 unique_ptr 最终是我需要的,但我需要一些可以在 Visual Studio 2008 和 Xcode (gcc 4.2) 上编译的东西。

我需要的功能是:

  • 可在工厂方法中使用,以便在复制时转移所有权(如 auto_ptr)
  • 支持release()(比如auto_ptr)
  • 可与前向声明一起使用(如 shared_ptr)

所以,我认为它确实是一个更好的 auto_ptr。在 boost 或其他地方有什么可以做到这一点的吗(注意:我没有时间把我的头缠在 Loki 周围)?还是我应该自己动手?

编辑:我刚刚阅读了有关 auto_ptr 的更多信息——听起来您可以将它与前向声明一起使用,前提是您确保类 header 包含在每个使用智能指针引用 header 的 .cpp 文件(例如,参见 GotW )。有人对此有任何一般性建议或经验法则吗?

EDIT2:shared_ptr Not Acceptable 原因是因为我需要一个 release() 方法,因为我通过引入工厂方法来整理一些遗留代码,但它必须与一些手动指针所有权代码共存。在整个代码库中使用 shared_ptr 会很棒,但这是一项艰巨的任务。

EDIT3:最后,一旦我发现前向包含的怪癖,auto_ptr 就足以胜任这项工作。尝试为 shared_ptr 编写自定义删除器以允许可选地删除指针也会很有趣。

最佳答案

编辑:在我原来的回答中,我没能理解 boost::shared_ptr 对你来说是 Not Acceptable (可能是出于性能原因)。

auto_ptr 如您所见,支持前向声明。您需要在那些可能破坏 auto_ptr 引用的对象的地方包含引用类的 header 。但是请注意,auto_ptr 的语义有点古怪,需要小心。

以下问题的答案包含更多信息,包括为什么 unique_ptr 只能为 C++0x 实现,因为它需要右值引用:

unique_ptr boost equivalent?

关于c++ - 是否有像 auto_ptr 和 shared_ptr 这样不需要 C++0x 的通用智能指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3767842/

相关文章:

c++ - boost::shared_ptr 在多线程中使用它安全吗?

c++ - 在 vector 中调用函数指针不会做任何事情

c++ - 将 int 值分配给地址

c++ - 智能指针如何在 delete 和 delete[] 之间进行选择?

c++ - 在多个线程/函数之间使用shared_ptr-IDS Peak API

C++ 智能指针地址

c++ - 我可以通过引用函数来传递 auto_ptr 吗?

使用 unique_ptr 包含 char 数组的 C++ 对象

c++ - 替换装饰器模式以强制执行创建顺序

c++ - 成员函数声明中是否允许限定名称?