c++ - *smart_ptr 和 *smart_ptr.get() 有什么区别
问题描述
据我了解,取消引用 -*smart_ptr
和get()
+ 取消引用*smart_ptr.get()
使用智能指针做同样的事情,但可能有一些我不知道的事情,因为我在第二种方法中看到了很多案例被使用了,那有什么意义呢?它会以任何方式影响性能吗?
解决方案
没有区别。[unique.ptr.single.observers]和[util.smartptr.shared.obs]中的标准都定义operator*
为is *get()
。
get
当您需要一个指向托管对象的原始指针以传递给仅包含原始指针的东西时,应该使用它。否则,*
并->
为智能指针重载以将这些操作应用于托管指针。
您可能很想使用&*smart_ptr
获取指向托管对象的原始指针,但&
它是一个可以重载的运算符,可能会给您错误的结果。获取地址(指针)的正确方法是std::addressof(*smart_ptr)
,但 usingsmart_ptr.get()
更短。
推荐阅读
- java - 休眠:替换对象(OneToOne)
- vue.js - Vue JS将项目推送到数组?
- c++ - 在c ++中将`const`数组的元素设置为另一个数组的长度
- node.js - 如何从 Node Js 中服务器端的 html 字符串中删除所有 JavaScript
- firebase - Firebase OAuth 的回调 URL 不包含项目 ID
- r - 在R中的条件下找到多行的最大值
- spring - 用于非 Spring Boot 项目的 Zipkin 和 Sleuth 集成
- javascript - 如果它在引号内,则附加到数组值中
- arrays - Ruby - 如何按对象数组分组?
- audio-streaming - 使用 Web Audio API 流式传输大型循环音频文件