首页 > 解决方案 > *smart_ptr 和 *smart_ptr.get() 有什么区别

问题描述

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

标签: c++c++11stdshared-ptrsmart-pointers

解决方案


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


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


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


推荐阅读