*smart_ptr 和 *smart_ptr.get() 有什么区别

Van*_*hev 0 c++ smart-pointers std shared-ptr c++11

据我所知,取消引用 -*smart_ptrget()+ 取消引用*smart_ptr.get()使用智能指针做同样的事情,但可能有一些我不知道的事情,因为我在第二种方法中看到了很多情况被使用了,那有什么意义呢?它会以任何方式影响性能吗?

Nat*_*ica 6

没有区别。在标准[unique.ptr.single.observers][util.smartptr.shared.obs]都定义operator**get()


get当您需要一个指向托管对象的原始指针以传递给除原始指针之外的对象时,应该使用它。否则,*->重载为智能指针这些操作适用于托管指针。


您可能很想使用它&*smart_ptr来获取指向托管对象的原始指针,但它&是一个可以重载并可能给您错误结果的运算符。获取地址(指针)的正确方法是std::addressof(*smart_ptr),但 usingsmart_ptr.get()更短。