相关疑难解决方法(0)

208
推荐指数
5
解决办法
5万
查看次数

为什么auto_ptr <T>没有定义运算符!()?

标题几乎总结了我的问题.为什么不能执行以下操作来检查空指针?

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!()定义?

c++ auto-ptr

20
推荐指数
3
解决办法
2431
查看次数

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

我想要一个非引用计数的智能指针,可以结合一些的有用的方面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以允许可选地删除指针也会很有趣.

c++ smart-pointers shared-ptr

8
推荐指数
1
解决办法
1617
查看次数

标签 统计

c++ ×3

auto-ptr ×2

c++-faq ×1

raii ×1

shared-ptr ×1

smart-pointers ×1

stl ×1