首頁 >後端開發 >C++ >在基底類別向量中儲存派生類別物件時如何避免物件切片?

在基底類別向量中儲存派生類別物件時如何避免物件切片?

Patricia Arquette
Patricia Arquette原創
2024-12-23 19:49:14430瀏覽

How Can Object Slicing Be Avoided When Storing Derived Class Objects in Base Class Vectors?

派生類別儲存中的物件切片

將派生類別的物件儲存在為基底類別設計的向量中時,可能會遇到意外的行為。原因在於物件切片,其中派生類別特定的成員被截斷。

範例:

#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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn