簡體   English   中英

C ++智能指針多態性

[英]C++ smart pointers polymophism

我對智能指針還很陌生,因此如果我的問題對某些人來說太幼稚了,對不起。 這是我想做的一個例子:

using namespace std;

class Base
{
protected:
   int m_Property;
public:
   virtual function() {...;}
}

class DerivedA : public Base
{
public:
   virtual function() {second implementation...;}
   virtual functionA() {...;}
}

class DerivedB : virtual public Base, public DerivedA
{
public:
   virtual functionB() {...;}
}

void main()
{
   map<int, shared_ptr<Base>> myMap;

   shared_ptr<Base> object_ptr1 =  shared_ptr<Base>(new Base());
   shared_ptr<Base> object_ptr2 =  shared_ptr<Base>(new DerivedA());
   shared_ptr<Base> object_ptr3 =  shared_ptr<Base>(new DerivedB());

   myMap.insert(pair<int, shared_ptr<Base>>(1,object_ptr1));
   myMap.insert(pair<int, shared_ptr<Base>>(2,object_ptr2));
   myMap.insert(pair<int, shared_ptr<Base>>(3,object_ptr3));

   // What i want to do (cause I know for sure that object_ptr3 points to a DerivedB object):
   object_ptr3->functionB();
}

假設我已經從myMap中提取了一個共享指針(我們稱其為myPointer),並且我想使用DerivedB特定的(但不是繼承的虛擬)函數。 編譯后的不理解的原因,而是認為myPointer(或object_ptr3在上面的例子)是基本類型。

我嘗試使用static_pointer_cast和dynamic_pointer_cast(在某些情況下不起作用)進行強制轉換...處理這些情況的更好的ID。

提前致謝

dynamic_pointer_cast必須在這種情況下起作用。 也許您在投放時做錯了。
它看起來應該像這樣:

std::shared_ptr<Base> base(new Base);
std::shared_ptr<Derived> derived = std::dynamic_pointer_cast<Derived>(base);

再次查看您的代碼,問題可能出在您正在調用object_ptr3.functionB(); . 而不是-> object_ptr3shared_ptr ,因此. 操作員將訪問shared_ptr類的成員,而不是您的派生類。

另外,是否sharedshared_ptr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM