c – 智能指针的效率如何?

c – 智能指针的效率如何?
我知道,std :: shared_ptr使用引用计数,因此它具有复制和移动语义,另一方面std :: unique_ptr(因此名称唯一)只有移动语义,因此尝试复制它是一个编译错误.

然而,对我而言,它并不十分清楚.在大多数情况下,我可以简单地在std :: unique_ptr上使用std :: shared_ptr,或者我应该尽可能使用std :: unique_ptr,因为它更有效率,因为它不需要处理引用计数?

另外,我知道智能指针在处理时非常有用,例如异常安全,但它们是否通常取代传统的T *指针?
尽可能使用智能指针而不是传统的T *指针是一种很好的编程习惯吗?

最佳答案
经验法则是:

>如果可以,可以直接使用基于堆栈的对象,也可以使用引用而不是使用指针.
>否则,如果您不必处理共享所有权(通常不使用),则使用unique_ptr – 它不仅更快,而且更安全(没有循环引用).
>否则,如果您确实拥有共享所有权,请使用shared_ptr

在某些情况下,当指针不带有所有权时,原始指针就可以了 – 例如作为函数的输入参数:

void draw (const shape* sh) {
    sh->draw();
}

...
std::unique_ptr<shape> ptr(new triangle);
draw(ptr.get());
点击查看更多相关文章

转载注明原文:c – 智能指针的效率如何? - 乐贴网