派生类存储中的对象切片
将派生类的对象存储在为基类设计的向量中时,可能会遇到意外的行为。原因在于对象切片,其中派生类特定的成员被截断。
示例:
#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中文网其他相关文章!