一旦你采用了boost的智能指针,你有没有使用原始指针的情况?

App*_*ood 12 c++ boost smart-pointers

我很好奇,因为我开始采用更多的提升习语和看似最好的做法我想知道我的c ++甚至远远看起来像过去的c ++,经常在典型的例子和那些人的头脑中找到还没有被介绍过"Modern C++"?

Nem*_*vic 7

shared_ptr几乎没有使用,因为我总体上避免共享所有权.因此,我使用类似boost::scoped_ptr"拥有"对象的东西,但对它的所有其他引用都是原始指针.例:

boost::scoped_ptr<SomeType> my_object(new SomeType);
some_function(my_object.get());
Run Code Online (Sandbox Code Playgroud)

但是some_function会处理一个原始指针:

void some_function(SomeType* some_obj)
{
  assert (some_obj);
  some_obj->whatever();
}
Run Code Online (Sandbox Code Playgroud)

  • 参考人!除非您想明确允许使用nullptr调用函数,否则我会说引用是可行的.为什么在编译器很乐意为您执行此操作时在运行时捕获错误? (7认同)
  • 这完全是关于范围.将所有者放在将要使用的对象的最外层范围内,然后只在该范围内传递指向它的指针.不允许任何引用存在于比所有者更广泛的范围内,因此可以保证指向有效对象. (2认同)

Tim*_*her 6

只有几个我的头顶:

  • 在内存映射文件中导航.
  • Windows API调用您必须过度分配的地方(如LPBITMAPINFOHEADER).
  • 您在任意内存(VirtualQuery()等)中进行调整的任何代码.
  • 几乎任何时候你在指针上使用reinterpret_cast <>.
  • 任何时候你使用placement-new.

这里的共同点是"在任何情况下,您需要将一块内存视为除了您具有分配控制的资源之外的其他内容".