복사(copy)는 컨테이너 안의 객체에 맞게 비용은 최소화하며, 동적은 정확하게 하자

일반적으로 STL에 넣는 동작(push_back, insert) 이나 값을 얻어오는 동작은 모두 객체의 복사 를 통해서 이루어진다. 이 동작을 관리하는 연산자 두가지는 복사생성자, 대입연산자 이며 일반적으로

class Widget{
public:

Widget(const Widget& );
Widget& operator=(const Widget&);
}
형식으로 선언된다. 이 연산자들의 경우는 클래스에 대해 구현이 안되있을 경우에는 컴파일러가 자동적으로 생성해서 사용하게 된다. 이것과 관련된 내용으로 RuleOfThree 를 참조하는것이 좋을것 이다.
컨테이너의 동작이 객체를 복사하는 것이 기본이기 때문에 상속받아 구현한 클래스를 부모 클래스를 넣는 컨테이너에 넣으려하면 슬라이스 라는 현상이 발생하며 이것은 상속받은 클래스의 맴버함수나 가상함수를 호출하는데 문제를 일으키게 된다.
이것을 해결하는 방법은 포인터의 컨테이너를(물론 상위클래스의 포인터) 사용하는것 이지만 이 방법은 포인터의 객체 할당과 해제에 대해 신경을 써줘야 한다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다