[英]Boost shared_ptr passing a derived class
所以我有這樣的事情
class baseclass {
....
}
class derived : public baseclass {
...
}
void func(boost::shared_ptr<baseclass>& a){
//stuff
}
boost::shared_ptr<derived> foo;
func(foo);
這樣行嗎? 我假設不是因為它不是同一類型,但是我不具備將其轉換為正確類型的能力,因此您是否可以想到有任何解決方法可以使它起作用?
編輯:之所以無法對我的知識進行轉換是因為我正在對類型為boost::shared_ptr<derived>
的向量進行排序,所以我只使用vec.begin()和vec.end( )
只要
T*
可以隱式轉換為U*
就可以將shared_ptr<T>
隱式轉換為shared_ptr<U>
。 特別是,shared_ptr<T>
可以隱式轉換為shared_ptr<T const>
,也可以隱式轉換為shared_ptr<T const>
shared_ptr<U>
,其中U是T
的可訪問基數,也可以隱式轉換為shared_ptr<void>
。
http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/shared_ptr.htm#Members
但是,由於您的代碼現在不起作用。 boost::shared_ptr<baseclass>
對象的隱式構造必須綁定到const引用,或者被復制以持久地進行構造。
考慮兩者之一
void func(boost::shared_ptr<baseclass> a)
要么
void func(const boost::shared_ptr<baseclass>& a)
是的,它將起作用。 只是編譯它比在這里問要快嗎?
shared_ptr
具有模板化的轉換構造函數,該構造函數允許在(且僅當) D*
可隱式轉換為B*
從shared_ptr<D>
到shared_ptr<B>
隱式轉換B*
我會非常驚訝。 您需要傳遞適當類型的左值。 為此,該類應該是基類,事實並非如此。
注意:如果您的函數按值或const&取ptr,則適用其他規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.