파생 클래스 저장소의 개체 슬라이싱
기본 클래스용으로 설계된 벡터에 파생 클래스의 개체를 저장할 때 예기치 않은 동작이 발생할 수 있습니다. 그 이유는 파생된 클래스별 멤버가 잘리는 객체 슬라이싱에 있습니다.
예:
#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 중국어 웹사이트의 기타 관련 기사를 참조하세요!