我想要一个非引用计数的智能指针,它可以结合 auto_ptr
和 shared_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 实现,因为它需要右值引用:
关于c++ - 是否有像 auto_ptr 和 shared_ptr 这样不需要 C++0x 的通用智能指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3767842/