{ 왜? 보는 사람이나 개발하는 사람이나 메모리 누수인가? 아닌가? 에 대해서 고민하게 만들기 때문이다. 어디서 할당하고 어디서 해지 해야 하는가? 하나의 모듈에서 할당해서 해지 해야 한다. 작게 말하면, 하나의 클래스 내부에서 생성된 메모리는 클래스 내부에서 해제 한다는 뜻으로 해석해도 무난 하다. 부득이 하게, 다른 모듈과 연관된 경우에는 어떻게 하는가? 이럴 때를 위해서 우리의 부스트께선 스마트 포인터(Smart Pointer)를 만들어 두었으니, 이것을 이용 하면 된다. 스마트 포인터의 사용법을 알려 줄 수 있는가? 부스트의 스마트 포인터는 여러개가 있지만 shared_ptr 를 많이 사용 한다. 검색의 왕인 구글에게 물어 보면 잘 알려 주므로 생략 하겠다. }
CPPCS 검색 결과
{ 네임스페이스 using이 무엇인가? namespace를 선언된 위치로 모두 끌고 오는 엄청난 매력적인 녀석이다. 사용 방법은 using std; 처럼 namespace를 지칭하면 된다. 이 매력적인 녀석이 왜 안되나? .. 너무 매력적이면 역시 근심 덩어리다. 앞에서 알짱거리는 매력적인 녀석을 항상 서로 차지하려고 다투는데 얼마나 골치 아프겠는가? (#include 앞) 예를 들어 줄 수 있는가? // s1.h 을 다음과 같이 만든다. #pragma once #include namespace A { int f(double) { std::cout
{ 왜냐하면 의도하지 않은 이름 검색으로 혼란을 격게 되기 때문이다. 항목 57에서 이야기 했던 것의 반대 이야기이니, 크게 더 설명할 것이 없다. 이름 검색을 알게 되면, 함수의 호출이 머리속에 그려지기 때문에, 이상한 함수 호출이나 이상한 에러메세지는 "이름 검색이 꼬였나?" 를 생각해 보면 된다. }
{ 클래스의 일부가 되게끔 디자인된 비멤버 함수의 경우, 클래스와 같은 네임스페이스 내에 넣어야 한다는 것이다. 왜!? C++의 이름 검색 시스템 때문이다. 이 이름 검색 시스템은 Koenig lookup 라고도 불린다. 해당 사항을 자세히 말해 줄 수 있는가? 물론 말해 줄 수 있다. Exceptional C++ 항목 31 ~ 항목 34 에 무척 자세히 나와 있고, ikpil.com 에서 검색해도 어느 정도 나오니 한번 검색해 봄이 좋을 것 같다. 넣게 되면 무엇이 좋아 지는가? 최소한 컴파일러가 혼란을 겪는 것을 줄여 주고, 개발자 또한 혼란을 겪는 것을 줄여 줄 수 있다. 간략하게만 소개해 줄 수 있나? #include void swap( std::string const& str1, std::str..
{ 왜냐하면 swap은 강력한 도구로 만들어 주기 때문이다. 무엇을 위한 강력한 도구인가? 안전한 복사를 위한 것이다. 안전한 복사는 어떻게 만들 수 있는가? 여러가지 방법이 있지만, pimpl 이디엄이 가장 널리 쓰인다. 그리고 임시객체를 이용한 방법도 널리 쓰인다. 어떻게 만드는가? ... 귀찮.. 책을 보시라 ㅋㅋ }
{ 왜냐하면, 일반적이기 때문이다. 정규형 할당 방식이 무엇인가? 비가상 operator=을 말하는 것이다. 가상 operator= 를 만들면 안되나? 모든 사람들이 일반적으로 operator=에 가상성을 부여하지 않기 때문에, 많이 혼란스러울 수 있기 때문에 만들면 안된다. 다형적 복사를 원한다면 virtual Clone 함수를 만들어서 사용 하는게 더 좋다. }
최근댓글