boost 란 무엇인가?
간단 명료하게 개인적인 생각으로 정의해보자면 boost는 C++ Standard Tamplate Library(STL)의 확장 및 추가 편의 Library의 집합체 정도로 말할 수 있습니다. 장점은 역시 '무료' 라는 것이고, Smart Pointer , Regular Expression, Thread - Mutex 등등 직접적으로 구현하고 안정화 시키기에 오랜 시간을 필요로하는 것이나 실수 유발 가능성 및 귀차니즘을 자극하는 것들중 자주 쓰이는 알고리즘들을 한데 묶어놓아, 프로그래머의 보이지 않는 손이 되어주는 아주 착한 녀석이라는 것이죠. 아마 이 boost만 만족할만큼 자유자재로 이용할 정도면 '상당한 내공을 보유했다' 라고 해도 될 것 같다는 생각입니다. (너무 넘겨짚나요? ㅎㅎ)
boost 공식 홈페이지 : http://www.boost.org/
boost를 접하고 퇴근후 혹은 남는 짜투리시간에 공부하면서 느낀것이지만, 이건 알아둬서 독이될것이 없겠구나 하는 겁니다. 아직 배워야 할것은 많은데 시간은 부족하고, 투자한 시간보다 얻는게 부족하다는 생각에 계속 리포팅 할 생각입니다. 여러가지로 많은 도움 부탁드려요~
아직 명확한 정의를 내리기엔 충분한 내공을 쌓지 못했기에 잘못된 부분이 있을 여지가 있으니 발견되면 지적해주시기 바랍니다.
boost 정리 카페 : http://cafe.naver.com/boostlib
2009. 6. 29. 11:29
[C/C++][Boost] Smart Pointer - introduction
2009. 6. 29. 11:29 in Programming/Boost

Boost 를 공부하면서 그동안 내가 습득하는 스킬들에 대해 정리한적이 없다는 생각에 블로그에라도 남겨야겠다는 생각이다.
Boost 를 처음쓰게 된건 좀더 효율적인 thread 관리를 위한 방법은 없는가를 찾다가 boost의 mutex 를 사용하게 되고, shared_ptr 도 알게되면서다.
그 외에도 수 많은 장점을 지고 있는 boost 를 내 스킬로 만들기 위해 하나 하나 정리해보려고 한다.
Smart Pointer 의 종류
참조 : boost introduction 원문
Smart Pointer 란?
Pointer를 생성하고 사용할때 있어서 그 무엇보다 가장 중요한것은 생성도 아니요 관리도 아니요, 바로 사용후 제자리에 돌려놓는 '삭제' 다. 20개의 원룸을 가진 주인이 있다고 치자. 입주자들이 방을 이용하기 위해 들어왔지만, 나갈때 한마디 말 없이 나가면, 주인은 아직 그 방에 입주자들이 있다고 생각하고, 방을 이용하고자 하는 사람에게 방을 내줄 수 없는 현상이 발생한다. 즉, 메모리는 한정적인데 생성만 하고 삭제를 하지 아니하면 최후에는 메모리 부족으로 운영체제에 문제가 발생할 가능성이 매우 높다(99.9%). 최근 XP 이후에 들어서는 어느정도 메모리 관리 기능이 들어가있어, 원체 사용하지 않는 메모리는 어느정도 자동 해제해주지만, 그 전 운영체제에서는 OS가 뻗어버리는 경우가 비일비재 했다는 사실. Windows 98 이전에서 블루스크린이 괜히 뜨는게 아니었다는 것이다. 때문에 포인터의 관리는 프로그램을 창조하고자 하는 프로그래머의 몫인데, 본의 아니게 실수로 인해 메모리 해제가 이루어지지 않다보면, 그 버그를 찾는데만도 이만저만 어려운 점을 보완해주기 위해 탄생한 것이 바로 Smart Pointer 이다. 자기 자신을 가리키는 포인터가 존재하지 않을때 소멸자를 호출하는 점이 장점인 것이다.
기존의 Standard Template Library (이하 STL) 에서 smart pointer (auto_ptr) 이 있었으나, 배열 포인터가 지원되지 않고, 내부적으로 복사생성자를 통해 복사 이후 자기 자신을 소멸시켜버린다고 한다. 때문에 container (list, vector 등) 와 같은 tamplate 을 이용시 큰 문제가 될 수 있고, 원천적으로 복사생성자를 수정하여 사용한다 하더라도 언제까지 이와같은 번거로운 문제를 떠안고 코딩을 해야하는데, 프로그래머가 실수를 안한다면 모를까...
이 외에도 여러가지 문제점이 있어 boost의 scoped_ptr이나 shared_ptr 을 사용하게 되는 현실.
이녀석을 최대한 내껄로 만들고 내 시다바리화 시킬때까지 공부는 계속된다.
Boost 를 처음쓰게 된건 좀더 효율적인 thread 관리를 위한 방법은 없는가를 찾다가 boost의 mutex 를 사용하게 되고, shared_ptr 도 알게되면서다.
그 외에도 수 많은 장점을 지고 있는 boost 를 내 스킬로 만들기 위해 하나 하나 정리해보려고 한다.
Smart Pointer 의 종류
scoped_ptr | <boost/scoped_ptr.hpp> | 오직 하나의 객체만 생성이 가능하고 복사생성자 호출이 불가능, 즉 복사할 수 없다. |
scoped_array | <boost/scoped_array.hpp> | scoped_ptr 과 비슷한 기능의 배열 (하나의 배열만 생성이 가능, 복사 불가) |
shared_ptr | <boost/shared_ptr.hpp> | 여러개의 포인터로 객체를 공유할 수 있고, 내부 ref Count 로 유지, 삭제한다. |
shared_array | <boost/shared_array.hpp> | shared_ptr과 비슷한 기능의 배열 |
weak_ptr | <boost/weak_ptr.hpp> | shared_ptr로 생성된 pointer를 접근자로서만 사용하기 위한 smart pointer (shared_ptr로 생성된 두 객체가 서로를 가리킴으로 인해 ref count가 줄지 않아 memory leak이 발생하는 경우를 방지. weak count) |
intrusive_ptr | <boost/intrusive_ptr.hpp> | shared_ptr 보다 좀더 원시적인 smart pointer (raw pointer의 접근이 가능하고, ref count 에 직접적으로 접근이 가능) |
참조 : boost introduction 원문
Smart Pointer 란?
Pointer를 생성하고 사용할때 있어서 그 무엇보다 가장 중요한것은 생성도 아니요 관리도 아니요, 바로 사용후 제자리에 돌려놓는 '삭제' 다. 20개의 원룸을 가진 주인이 있다고 치자. 입주자들이 방을 이용하기 위해 들어왔지만, 나갈때 한마디 말 없이 나가면, 주인은 아직 그 방에 입주자들이 있다고 생각하고, 방을 이용하고자 하는 사람에게 방을 내줄 수 없는 현상이 발생한다. 즉, 메모리는 한정적인데 생성만 하고 삭제를 하지 아니하면 최후에는 메모리 부족으로 운영체제에 문제가 발생할 가능성이 매우 높다(99.9%). 최근 XP 이후에 들어서는 어느정도 메모리 관리 기능이 들어가있어, 원체 사용하지 않는 메모리는 어느정도 자동 해제해주지만, 그 전 운영체제에서는 OS가 뻗어버리는 경우가 비일비재 했다는 사실. Windows 98 이전에서 블루스크린이 괜히 뜨는게 아니었다는 것이다. 때문에 포인터의 관리는 프로그램을 창조하고자 하는 프로그래머의 몫인데, 본의 아니게 실수로 인해 메모리 해제가 이루어지지 않다보면, 그 버그를 찾는데만도 이만저만 어려운 점을 보완해주기 위해 탄생한 것이 바로 Smart Pointer 이다. 자기 자신을 가리키는 포인터가 존재하지 않을때 소멸자를 호출하는 점이 장점인 것이다.
기존의 Standard Template Library (이하 STL) 에서 smart pointer (auto_ptr) 이 있었으나, 배열 포인터가 지원되지 않고, 내부적으로 복사생성자를 통해 복사 이후 자기 자신을 소멸시켜버린다고 한다. 때문에 container (list, vector 등) 와 같은 tamplate 을 이용시 큰 문제가 될 수 있고, 원천적으로 복사생성자를 수정하여 사용한다 하더라도 언제까지 이와같은 번거로운 문제를 떠안고 코딩을 해야하는데, 프로그래머가 실수를 안한다면 모를까...
이 외에도 여러가지 문제점이 있어 boost의 scoped_ptr이나 shared_ptr 을 사용하게 되는 현실.
이녀석을 최대한 내껄로 만들고 내 시다바리화 시킬때까지 공부는 계속된다.
2009. 6. 22. 11:39
[VC++][MFC] CListCtrl (List Control) 다중 선택 관리
2009. 6. 22. 11:39 in Programming/VC++ [MFC]

CListCtrl 에서 Multi Mark 관리 하기..
삭제시 유의해야할 점은... 선택 끝부분 부터 삭제하는것이 좋다...
0 ~ 5까지의 List 중 1, 3을 낮은 순으로 삭제하게 되면
실제 1, 4가 삭제되는 현상이 생긴다.
더 좋은 방법이 있을련지 모르겠지만 일단 이방법을 사용한다 -_-a
삭제시 유의해야할 점은... 선택 끝부분 부터 삭제하는것이 좋다...
0 ~ 5까지의 List 중 1, 3을 낮은 순으로 삭제하게 되면
실제 1, 4가 삭제되는 현상이 생긴다.
더 좋은 방법이 있을련지 모르겠지만 일단 이방법을 사용한다 -_-a