2016-01-21 321 views
1

比方說,我有以下幾種類型:const正確性和shared_ptr的轉換

using pointer = std::shared_ptr<MyType>; 
using pointer_to_const = std::shared_ptr<const MyType>; 

現在,如果我有一段代碼如下所示:

void fun(pointer_to_const ptr); 

pointer myObj = SomeFactoryMethod(); 
fun(myObj); 

pointerpointer_to_const之間的自動轉換?如果有,在此轉換期間是否會複製底層的MyType對象?

因爲,如果有一個的轉換,而且也沒有拷貝,則在多線程上下文另一個線程可以使用原始myObj指針修改基礎對象,從而違反其由fun預期const

回答

1

是的,這樣的轉換可以完成,並且將是指針和控制塊(ref count)的淺拷貝。

1

是的,這將工作。的shared_ptr下面的構造函數將被調用:

template< class Y > 
shared_ptr(const shared_ptr<Y>& r); 

隨着Y推斷爲const MyType