왜냐하면?
RAII 방식은 객체의 scope(존재 할 수 있는 범위)를 이용하여, 자원을 관리하는데, 객체를 복사 했을때, 소멸자를 어떻게 정의하느냐에 따라서, 전기적 쇼크를 프로그래머에게 줄지, 램에게 줄지 결정지을수 있기 때문이다.
.. 전기적 쇼크는 항상 램에게만 줘야 한다.
일반적인 사례
1. 복사를 금지한다
- 유니크한 객체를 관리할 때 사용 한다.
2. 관리하고 있는 자원에 대해 참조 카운팅을 수행한다.
- 해당 자원을 가르키는 포인터만을 복사 할때, 카운팅 한다. 까다롭지만 가장 효율적인 방법이다.
3. 관리하고 있는 자원을 진짜로 복사한다.
- 보통 문자열 객체에 대해 관리할때 사용 한다. 클래스 인터페이스를 무시할 경우가 많이 생기기 때문이다. []연산자 때문에..
4. 관리하고 있는 자원의 소유권을 옮긴다.
- 관리되는 자원이 유니크 해야만 할때 사용한다. 대표적으로 std::auto_ptr 이 있다.
이것만은 잊지 말자!
1. RAII 방식의 객체의 복사에 대해서 반드시 고려하자.
2. 보통은 일반적인 사례 1번과 (2,3 조합형)을 많이 사용 한다.
여담
MEC++ 을 보면 참조카운팅, smart_ptr에 대한 주의깊은 설명을 한다.
중요한건 벙어리 포인터 처럼 동작하게 하되, 스마트 포인터의 기능이 있고, 혼동되지 않게 만들어야 한다고 하는데, ... 역시 설계만이 살길이다.
관련링크
http://redinlife.egloos.com/1611410
http://ikpil.tistory.com/293
RAII 방식은 객체의 scope(존재 할 수 있는 범위)를 이용하여, 자원을 관리하는데, 객체를 복사 했을때, 소멸자를 어떻게 정의하느냐에 따라서, 전기적 쇼크를 프로그래머에게 줄지, 램에게 줄지 결정지을수 있기 때문이다.
.. 전기적 쇼크는 항상 램에게만 줘야 한다.
일반적인 사례
1. 복사를 금지한다
- 유니크한 객체를 관리할 때 사용 한다.
2. 관리하고 있는 자원에 대해 참조 카운팅을 수행한다.
- 해당 자원을 가르키는 포인터만을 복사 할때, 카운팅 한다. 까다롭지만 가장 효율적인 방법이다.
3. 관리하고 있는 자원을 진짜로 복사한다.
- 보통 문자열 객체에 대해 관리할때 사용 한다. 클래스 인터페이스를 무시할 경우가 많이 생기기 때문이다. []연산자 때문에..
4. 관리하고 있는 자원의 소유권을 옮긴다.
- 관리되는 자원이 유니크 해야만 할때 사용한다. 대표적으로 std::auto_ptr 이 있다.
이것만은 잊지 말자!
1. RAII 방식의 객체의 복사에 대해서 반드시 고려하자.
2. 보통은 일반적인 사례 1번과 (2,3 조합형)을 많이 사용 한다.
여담
MEC++ 을 보면 참조카운팅, smart_ptr에 대한 주의깊은 설명을 한다.
중요한건 벙어리 포인터 처럼 동작하게 하되, 스마트 포인터의 기능이 있고, 혼동되지 않게 만들어야 한다고 하는데, ... 역시 설계만이 살길이다.
관련링크
http://redinlife.egloos.com/1611410
http://ikpil.tistory.com/293
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자. (0) | 2008.06.05 |
---|---|
항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자. (0) | 2008.06.04 |
항목 17: new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 (0) | 2008.06.03 |
항목 16: new 및 delete를 사용할 때는 형태를 반드시 맞추자 (0) | 2008.06.03 |
항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. (0) | 2008.06.02 |
항목 13: 자원 관리에는 객체가 그만! (0) | 2008.06.01 |
항목 12: 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2008.06.01 |
항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2008.06.01 |
항목 10: 대입 연산자는 *this의 참조자를 반환하게 하자. (0) | 2008.05.31 |
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (0) | 2008.05.31 |
최근댓글