我对shared_ptr感到困惑,我的主要问题是:是否在执行以下操作时创建了一个新对象(shared_ptr对象)?
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) 怎么样?
编者会做下面的事吗?
shared_ptr<const T> tmp_v2 = v1;
Func2(tmp_v2);我关心它,因为Func2 Func1**.** 可能比花费更多的时间(如果它确实创建了一个新的shared_ptr对象)
非常感谢你的帮助!
发布于 2017-03-26 09:52:36
这里没有什么神奇的东西,它只是 constructor overload (number 9)之一
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管理。
https://stackoverflow.com/questions/43027186
复制相似问题