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

the*_*ill 8 c++ smart-pointers shared-ptr

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

我需要的功能是:

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

所以,我想这真的更好auto_ptr.是否有任何东西在提升或其他地方做到这一点(注意:我没有时间把我的头包裹在Loki周围)?或者我应该自己动手?

编辑:我刚刚阅读了更多关于auto_ptr- 如果你确保每个.cpp文件中都包含类标题,你可以使用前向声明,如果你用智能指针引用标题(例如参见GotW).有人对此有任何一般性建议或经验法则吗?

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

编辑3:最后,auto_ptr一旦我发现前向包含的怪癖,就足够了.尝试编写自定义删除器shared_ptr以允许可选地删除指针也会很有趣.

Mar*_*n B 5

编辑:在我的原始答案中,我无法理解boost::shared_ptr您不能接受(可能出于性能原因).

auto_ptr如你所知,支持前瞻性声明.您需要在可能破坏该引用的对象的那些位置包含引用类的头auto_ptr.但请注意,语义auto_ptr略显古怪,需要一些小心.

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

unique_ptr提升等价?