객체의 저장을 위한 배열 클래스의 정의
Programming/C++ 2012. 9. 26. 02:04 |객체를 저장할 수 있는 배열 클래스를 정의할 때, 두 가지 형태로 각각 정의할 수 있다.
1. 객체를 저장하는 배열 기반의 클래스.
2. 객체의 주소 값을 저장하는 배열 기반의 클래스.
즉, 저장의 대상이 객체이냐, 아니면 객체의 주소 값이냐에 차이가 있는 것이다.
# Point 객체를 저장하는 배열 기반의 클래스
36행: Point 객체로 이뤄진 배열을 생성하고 있다. 인자를 받지 않는 void 생성자의 호출을 통해서 배열요소를 이루는 객체가 생성되므로, 위에 정의된 생성자에 설정된 디폴트 값에 의해 객체의 모든 멤버가 0으로 초기화된다.
67~70행: 임시객체를 생성해서 배열요소를 초기화하고 있다. 초기화의 과정에서 디폴트 대입 연산자가 호출되어 멤버 대 멤버의 복사가 진행된다. 저장의 대상이 객체라면, 여기서 보이는 것과 같이 대입 연산자를 통해서 객체에 저장된 값을 복사해야 한다.
# Point 객체의 주소 값을 저장하는 배열 기반의 클래스
(많이 사용되는 방법)
24행: Point 포인터 형을 의미하는 POINT_PTR을 정의하였다.
저장의 대상, 또는 연산의 주 대상이 포인터인 경우, 이렇듯 별도의 자료형을 정의하는 것이 좋다.
39행: 저장의 대상이 point 객체의 주소 값이기 때문에 POINT_PTR 배열을 생성하였다.
77행: Point 객체의 주소 값을 저장하고 있다. 이렇듯 객체의 주소 값을 저장할 경우, 깊은 복사냐 얕은 복사냐 하는 문제를 신경 쓰지 않아도 된다.
※ 위의 예제와 같이 주소 값을 저장하는 경우,
객체의 생성과 소멸을 위한 new, delete 연산 때문에 더 신경 쓸 것이 많아 보이지만,
깊은 복사냐 얕은 복사냐 하는 문제를 신경 쓰지 않아도 되기 때문에 이 방법이 더 많이 사용된다.
'Programming > C++' 카테고리의 다른 글
new, delete 연산자의 오버로딩 (0) | 2012.09.27 |
---|---|
2차원 배열처럼 동작하는 객체 (0) | 2012.09.27 |
const 함수를 이용한 오버로딩의 활용 (0) | 2012.09.21 |
배열의 인덱스 연산자 오버로딩 (0) | 2012.09.20 |
이니셜라이저의 성능 향상에 대하여 (0) | 2012.09.20 |