std :: shared_ptr应该如何谨慎处理?

Bre*_*hns 1 c++ shared-ptr c++11

我有些惊讶地发现,std::shared_ptr当它的指向对象以某种方式被删除时,它不提供保护(例如,抛出异常).我想这是出于性能原因; 假设shared_ptr正在完成其工作的对象shared_ptr应该从未删除过的点,因此浪费周期不断检查是愚蠢的.

我知道我可以明确检查a shared_ptr是否有效,但是如果shared_ptr"做它的工作"来维持对象的生命周期,那么每次触摸时都要明确检查是否有点过分shared_ptr.

所以我的问题是,鉴于此,我应该多么谨慎?关于是否,经常或何时应该检查shared_ptr?是否有"经验法则" ?

到目前为止,我最好的结论是模仿Java:每当你提交一个你没有创建的Java对象的引用时,你应该检查它null.这是一个很好的政策shared_ptr吗?

Lig*_*ica 6

就像任何其他指针一样,如果您有任何理由怀疑它可能包装空指针,请在使用它之前检查它.

shared_ptr确实有助于管理它指向的对象的生命周期,但这是一个完全独立的任务,从决定它是否指向一个对象.