我对shared_ptr感到困惑,我的主要问题是:当我执行以下操作时,c++是否会创建一个新的对象(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)
是按引用传递的。但是,Func2(v1)
又是怎样的呢?
编译器会在后面做什么呢?
shared_ptr<const T> tmp_v2 = v1;
Func2(tmp_v2);
我很重视这个问题,因为
Func2
可能会比Func1
花费更多时间(如果它确实创建了一个新的 shared_ptr 对象)。非常感谢您的帮助!
Y
可以隐式转换为T
。在OP的情况下,Y
是T
,而T
是const T
,因此需要"T
可以隐式转换为const T
"或者换句话说,"const T
必须可以从T
隐式转换"。就像他所说的那样。幸运的是,const T
总是可以从T
转换,所以它可以工作。 - Jonathan Wakely