※ C, C++의 기본 배열은 다음의 단점을 지니고 있다.


- 경계검사를 하지 않는다.


물론 이러한 특성이 유용하게 활용될 수도 있지만, 지금은 이러한 특성의 부정적 측면만을 고려해서 이야기를 전개한다.


이러한 담점의 해결을 위해서 "배열 클래스"라는 것을 디자인해야 한다. (배열의 역할을 하는 클래스)



17행: 반환형이 참조형이다. 때문에 배열요소의 참조값이 반환되고, 이 값을 이용해서 배열요소에 저장 된 값의 참조뿐만 아니라 변경도 가능하다.


위의 실행결과를 통해서 잘못된 배열접근이 있었음이 확인되었다. 때문에 위 유형의 클래스 정의를 통해서 배열접근의 안전성을 보장받을 수 있다.


※ []연산자는 연산의 기본 특성상 멤버함수 기반으로만 오버로딩 하도록 제한되어 있다.






다음과 같이 복사 생성자와 대입 연산자를 private으로 선언해서, 복사 또는 대입을 원천적으로 막을 수 있다.


이같이 하는 이유는

배열은 저장소의 일종이고, 저장소에 저장된 데이터는 유일성이 보장되어야 하기 때문에, 대부분의 경우 저장소의 복사는 불필요하거나 잘못된 일로 간주된다. 따라서 깊은 복사가 진행되도록 클래스를 정의할 것이 아니라, 위의 코드에서 보이듯 빈 상태로 정의된 복사 생성자와 대입 연산자를 private 멤버로 둠으로써 복사와 대입을 원천적으로 막는 것이 좋은 선택이 되기도 한다.



### 나의 모든 C++ 복습은 "열혈강의 C++" 에서 발췌하여 옮김.

Posted by scii
: