首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shared_ptr<T> to const shared_ptr<const T>&

shared_ptr<T> to const shared_ptr<const T>&
EN

Stack Overflow用户
提问于 2017-03-26 09:39:12
回答 1查看 1.3K关注 0票数 4

我对shared_ptr感到困惑,我的主要问题是:是否在执行以下操作时创建了一个新对象(shared_ptr对象)?

代码语言:javascript
复制
void Func1(const shared_ptr<T>& rhs) {}
void Func2(const shared_ptr<const T>& rhs) {}
shared_ptr<T> v1;
Func1(v1);
Func2(v1);

显然,Func1(v1)是由ref传递的。然而,Func2(v1) 怎么样?

编者会做下面的事吗?

代码语言:javascript
复制
shared_ptr<const T> tmp_v2 = v1;
Func2(tmp_v2);

我关心它,因为Func2 Func1**.** 可能比花费更多的时间(如果它确实创建了一个新的shared_ptr对象)

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-26 09:52:36

这里没有什么神奇的东西,它只是 constructor overload (number 9)之一

代码语言:javascript
复制
template< class Y >
shared_ptr( const shared_ptr<Y>& r );

9)构造一个共享由r管理的对象所有权的shared_ptr,如果r不管理对象,则该对象也不管理对象。如果Y不能隐式转换为(直到C++17)兼容(自C++17) T*,则模板重载不会参与重载解析。

为了使其工作,const T必须从T隐式可转换,另一个对象将不会被创建,而只能由另一个shared_ptr管理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43027186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档