티스토리 뷰
제가 SmartPointer를 이해하고 사용하는 방식은 다음과 같습니다.
unique_ptr
auto_ptr의 리네이밍 버전이죠. 포인터 소유권을 한 인스턴스에게 보장 시키기 위한 개념입니다. 소유자가 명확하기 때문에, native-ptr에서의 소유권 개념이 모호해질 수 있는 문제를 해결합니다.
shared_ptr
smart_ptr의 리네이밍 버전이라 볼 수 있습니다.
포인터 소유권을 나누어 갖기 때문에 native-ptr에서의 원본 포인터 소멸로 인한 참조 오류를 해결합니다.
dangling-ptr이 되는 문제는 해결하지만, life-cycle이 명확해지지 않는 문제와 상호 참조 오류를 만들곤 합니다.
물론 잘 사용하면 문제가 없지만요.
weak_ptr
소유권을 갖지 않는 ptr 입니다.
shared_ptr에게서 포인터 주소를 얻어와도 참조횟수가 증가한다거나, 소유권을 얻어오지 않습니다.
shared_ptr을 좀 더 완전하게 만드는 데에 일조 했습니다. (shared_ptr이 소유권을 공유한다는 것을 의미한다면, weak_ptr은 소유권을 가지지 않는 포인터라는 의미를 명확히 해주기 떄문)
또 boost_any는 의미상 좀 스마트 포인터와는 다르지만 애용하고 있어서 꼽사리로 집어넣어보겠습니다.
http://www.boost.org/doc/libs/1_53_0/doc/html/any.html
any_ptr(http://elky.tistory.com/323)의 boost 버전이랄까요?
void*로 담으면 잘못된 캐스팅할 여지가 넘쳐나서, 안전한 캐스팅을 지원하는 (대입 연산자를 통해) 기능입니다.
이로써 간략하게나마 스마트 포인터들에 대해서 알아봤습니다.
참고 자료
Smart Pointers (Modern C++)
'C++ > General' 카테고리의 다른 글
구조체 이니셜라이저 문제 (0) | 2013.06.14 |
---|---|
C++ 11 주요 Feature 정리 (C++ 0x에서 추가됐던 내용 포함) (0) | 2013.04.05 |
윈도우 예외 처리에 대한 정리 (0) | 2011.08.24 |
함수의 리턴 값의 포인터를 사용할 수 없는 문제 (1) | 2011.05.18 |
any_ptr - A Type-safe Generic Pointer (0) | 2010.09.30 |
- Total
- Today
- Yesterday
- 게임데브포에버
- 바로가기 프로그램
- ruby
- EzShortcut
- c언어
- 임백준
- 좋은 프로그래머
- 루비 온 레일즈
- Rails
- 디버깅
- NDC2013
- 디자인 패턴
- 멀티스레드
- TDD
- 게임개발포에버
- SDL
- EasyExec
- Ruby on Rails
- 루비
- 엘키
- perfmon
- ftp
- CppSQLite
- svn
- TraceRoute
- 리버스 엔지니어링
- RoR
- 조엘 온 소프트웨어
- MS-SQL
- SQLite Spy
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |