为什么使用std::auto_ptr<>标准容器是错误的?
标题几乎总结了我的问题.为什么不能执行以下操作来检查空指针?
auto_ptr<char> p( some_expression );
// ...
if ( !p ) // error
Run Code Online (Sandbox Code Playgroud)
必须这样做:
if ( !p.get() ) // OK
Run Code Online (Sandbox Code Playgroud)
为什么auto_ptr<T>不简单operator!()定义?
我想要一个非引用计数的智能指针,可以结合一些的有用的方面auto_ptr和shared_ptr.我认为C++ 0x unique_ptr最终是我需要的,但我需要能在Visual Studio 2008和Xcode(gcc 4.2)上编译的东西.
我需要的功能是:
release()(如auto_ptr)所以,我想这真的更好auto_ptr.是否有任何东西在提升或其他地方做到这一点(注意:我没有时间把我的头包裹在Loki周围)?或者我应该自己动手?
编辑:我刚刚阅读了更多关于auto_ptr- 如果你确保每个.cpp文件中都包含类标题,你可以使用前向声明,如果你用智能指针引用标题(例如参见GotW).有人对此有任何一般性建议或经验法则吗?
EDIT2:shared_ptr不可接受的原因是因为我需要一个release()方法,因为我通过引入工厂方法来整理一些遗留代码,但它必须与一些手动指针所有权代码共存.在整个代码库中使用shared_ptr会很棒,但这是一项艰巨的任务.
编辑3:最后,auto_ptr一旦我发现前向包含的怪癖,就足够了.尝试编写自定义删除器shared_ptr以允许可选地删除指针也会很有趣.