裸指针有多糟糕?

Obl*_*ons 3 c++ pointers smart-pointers

指向以其他方式分配的东西在C++中是否合理安全?

到目前为止,我一直在使用STL容器(在一种情况下,一个数组,但这是另一个问题)满足我所有的动态内存需求,因此我不需要显式使用该new关键字.我也很乐意使用普通的ol' int *foo类型指针来引用事物.现在我正在阅读关于智能指针的内容(我在Java上磨口,所以我以前从未担心过这个问题)而传统的智慧似乎是"裸指针不好,不要使用它们".

那我有多麻烦?我可以安全地继续使用裸指针,只要它们指向的东西有其他破坏条件吗?这是我可以逃避的事情,但将来应该避免吗?或者这是一场灾难,我应该在匆忙之后修复?

小智 6

裸露的指针本身是安全的,这是错误的使用它们是危险的(你可以很容易被带走).智能指针非常漂亮,但有些(shared_ptr)涉及引用计数,这会导致性能损失.您应该尝试使用适用的智能指针,但AFAIK使用指针不被认为是一个可怕的错误.

在引用STL容器的成员时应该小心,因为它们的地址在重定位期间可能会发生变化,从而使您遇到奇怪的错误.

  • [unique_ptr](http://en.cppreference.com/w/cpp/memory/unique_ptr)和[scoped_ptr](http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/scoped_ptr.htm )没有性能开销,并且必须避免在异常情况下发生内存泄漏. (3认同)
  • @ObliteraxScourgeofNations:可以安全地获取指向基于节点的容器的指针:`array`,`list`,`map`和`set`.当您为元素添加(或保留空间)时,其他容器可能使所有指针无效. (3认同)