派生クラスのストレージでのオブジェクトのスライス
基底クラス用に設計されたベクターに派生クラスのオブジェクトを格納すると、予期しない動作が発生する可能性があります。その理由は、派生クラス固有のメンバーが切り捨てられるオブジェクトのスライスにあります。
例:
#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 中国語 Web サイトの他の関連記事を参照してください。