파트 2에선 함수 템플릿을 알아 봤다면, 이제 클래스 템플릿을 알아보자, 클래스 템플릿은 메타 프로그래밍에서 본다면 특별한 녀석이니, 꼭 짚고 넘어가야 한다.(여기서 왜 특별한지는 이야기 하지 않는다 : ) ) 클래스 템플릿( class template )라 해도 일반 클래스와 다를게 없다. 클래스 템플릿을 만들기 전에 우선 일반 클래스로 만들어서 테스트를 해 보고, 템플릿 화를 시키는게 더 편하기까지 하니, 정말 차이가 없다는 것을 알 것이다. 클래스 템플릿 정의하기 #include template // or template class class_template { public: ~class_template( ) { } class_template( char a ) : a_ ( a ) { } public..
전체 글 검색 결과
이게 난이도 6 인가, : ) 한 8쯤 되는줄 알았는데, 더 정진해야겠다. 이번 항목을 클래스안에서 적용 될 것을 계산하여 스마트 포인터를 만들어 보는 항목이다. 알다 시피 클래스 안에서 스마트 포인터를 사용 할 때는 다음 4가지 경우를 반드시 생각해 봐야 한다. 첫째, 클래스의 생성자에서 어떻게 작동 하게 할 것인가? 둘째, 클래스의 소멸자에서 어떻게 작동 하게 할 것인가? 셋째, 클래스의 복사 생성자에서 어떻게 작동 하게 할 것인가? 넷째, 클래스의 복사 할당자에서 어떻게 작동 하게 할 것인가? 이번 항목은 이렇게 질문 4개에 대한 답변들로 이루어 졌다. 일전에 babo_ptr을 제작해보았던 터라 이 문제에 대해서 생각하여, 그 대처 방안으로 썼었는데, 다시 정리 하려 하니 귀찮다. 왜냐하면 결론을 ..
알다 시피 C++ 프로그래머에게 있어, 클래스의 멤버가 pointer 일 경우 각별한 주의가 필요로 한다는 것은 알 것이다. 그렇다면, 영리한 포인터 녀석들을 넣을 경우, 생길 수 있는 문제점을 알고 있는가? 이번 항목은 그런 문제에 대해서 이야기 하고 생각해 보는 시간을 갖기 위해 존재 한다. 질문 1. 다음 코드가 매우 불안한 이유는? class X1 { ~X1() { delete p_ } X1( int * p ) p_( p ) { } // 컴파일러가 만들어 주는 복사 생성자와 // 복사 할당자를 이용 한다. private: int *p_; }; 단번에 알겠지만, 메모리 누수가 일어 나거나, 두번 릴리즈 하게 된다. 질문 2. 그렇다면 스마트 포인터를 사용 한다면, 어떤 문제가 있을까? class X..
std::auto_ptr 에 대한 이야기이다. 이것은 표준에 있는 스마트 포인터 이기 때문에, 스마트 포인터의 대표격이다. 물론 C++ 0x 에선 shared_ptr 이 .. 대표로 갈아치우지 않을까 한다. : ) 질문 1. auto_ptr을 잘못 사용 하고 있는 코드이다. 한번 찾아 보아라. template void f( size_t n ) { auto_ptr p1( new T ); auto_ptr p2( new T[n] ); // .. 할일 있으면 더 한다. } 질문 1은 바로 답을 말하면, 배열을 담았다는 데에 있다. auto_ptr 은 배열을 담는다 해도 delete[] 를 호출해 주지 않기 때문에 문제이다. 질문 2. 이 문제를 어떻게 해결할 것이며, 어댑터 패턴이나 생성 작업의 문제점과 aut..
이번 항목은 반복자에 대한 개념을 이해해야 지만 가능하다. C++ 에선 각 컨테이너에 대한 iterator 를 제공해 주고 있기 때문에, 그냥 사용만 하면 되지만, 루아에선 이런 iterator 가 없기 때문에 반복자를 직접 구현해야 한다. 루아에선 단 하나의 자료구조인 table만 제공해 주고, 유저가 직접 다른 자료구조를 구현해야 되기 때문에, 반복자를 확실히 짚고 넘어가야 할 것 같다. 우선 table을 훑으며, 다음 요소를 가리키게 할려면, 우선 반복자가 테이블의 어디에 위치해 있는가? 를 저장할 변수 1개와, 어떤 값인가? 를 저장할 변수 1개가 있어야 된다. 무론 변수가 있어야 한다는 것은 표현하기 위한 언어일 뿐, 논리적 변수(구조상 변수가 없어도 변수가 있는것 처럼 하게 하는 가상의 변수)..
이 함수 꼬리 호출은, 지금까지 내가 해봤던 언어(라고 해봤자 C와 C++, PHP 밖에 없다)에서는 들어보지 못한 개념이다. (책에선 자동 꼬리 호출 이라하고 직역하면, 적절한 꼬리 호출 이라 하지만, 함수에 관련된 것이라 함수라고 하는게 더 좋을것 같기도 하다.) 함수 꼬리 호출은 무엇 인가? 함수A의 호출 후 함수A 내부에서 다른 함수B를 호출 하게 될 경우, A는 B의 꼬리이며, A는 꼬리 호출 된다고 할 수 있고, A는 B의 꼬리라고 할 수 있다. 즉 A는 B의 꼬리 함수이며, B는 꼬리 함수A의 호출 함수라 부를 수 있다. 이것이 왜 중요한가? 루아에선 이 함수 꼬리 호출이 특별한 조건이 만족하면, 스택 버퍼를 더 늘리지 않으면서 꼬리 함수를 잘라버려 주기 때문에 중요하다. 다시 말하면 함수 ..
최근댓글