일반적으로 STL에 넣는 동작(push_back, insert) 이나 값을 얻어오는 동작은 모두 객체의 복사 를 통해서 이루어진다. 이 동작을 관리하는 연산자 두가지는 복사생성자, 대입연산자 이며 일반적으로
class Widget{
public:
…
Widget(const Widget& );
Widget& operator=(const Widget&);
}
컨테이너의 동작이 객체를 복사하는 것이 기본이기 때문에 상속받아 구현한 클래스를 부모 클래스를 넣는 컨테이너에 넣으려하면 슬라이스 라는 현상이 발생하며 이것은 상속받은 클래스의 맴버함수나 가상함수를 호출하는데 문제를 일으키게 된다.
이것을 해결하는 방법은 포인터의 컨테이너를(물론 상위클래스의 포인터) 사용하는것 이지만 이 방법은 포인터의 객체 할당과 해제에 대해 신경을 써줘야 한다.
이것을 해결하는 방법은 포인터의 컨테이너를(물론 상위클래스의 포인터) 사용하는것 이지만 이 방법은 포인터의 객체 할당과 해제에 대해 신경을 써줘야 한다.