派生類別儲存中的物件切片
將派生類別的物件儲存在為基底類別設計的向量中時,可能會遇到意外的行為。原因在於物件切片,其中派生類別特定的成員被截斷。
範例:
#include <vector> using namespace std; class Base { public: virtual void identify() { cout << "BASE" << endl; } }; class Derived : public Base { public: virtual void identify() { cout << "DERIVED" << endl; } }; int main() { Derived derived; vector<Base> vect; vect.push_back(derived); // Object slicing occurs here vect[0].identify(); // Unexpectedly prints "BASE" return 0; }
解:使用Smart 儲存基底指標指標
為了儲存基底指標指標
為了避免物件切片,請將指標儲存到基址向量中的類別物件。具體來說,使用// Include smart pointer library #include <memory> // Replace raw pointers with smart pointers vector<shared_ptr<Base>> vect; int main() { Derived derived; vect.push_back(make_shared<Derived>(derived)); vect[0]->identify(); // Properly prints "DERIVED" return 0; }
來有效管理記憶體:
透過使用智慧指針,您可以保持衍生物件的多態性,同時無縫管理內存,無需手動操作指針。以上是在基底類別向量中儲存派生類別物件時如何避免物件切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!