C++ 은 개체지향 프로그래밍인가? 반은 맞고 반은 틀린 말이다. 자세한 것은 http://ikpil.tistory.com/400 참조 해 보는것도 나쁘지 않을 것이다. 조금 생각을 해 보고 다음 질문에 답해 보자. "C++은 포장(encapsulation), 예외 처리(exception handling), 상속(inheritance), 템플릿(template), 다형성(polymorphism), 강력한 형(type) 지원, 완벽한 모듈(module) 시스템을 포함하는 많은 발전된 객체지향적 생성을 지원하는 강력한 언어 입니다" 자! 논의 해 보자. 분석 음~ http://ikpil.tistory.com/400 와 비슷한 이야기 이다. Effective C++ 3판 항목 1이나 Exceptional C+..
책 정리 검색 결과
사실 난 이게 난이도 6이라는게 이해가 되지 않는다. 왜냐하면 new 연산자는 컴파일러에 의해서 한가지 단계가 감춰졌을 뿐더러, 쫒아 가기 힘든 구조라, 추론하기도 어렵다. 즉, 일개 프로그래머가 파악하기 힘든 구조이기 때문이다.(... 내가 멍청한 것 일 수도..) 이번 메모리 관리 부분은 그 유명한 Effective C++ 3판 항목 49 ~ 항목 52와 연계해서 보면, 몇가지는 추론을 통해 알 수 있을 것이다. 그렇다면 어떤 문제가 있는지 알아보고, 생각을 해보자.(생각 자체를 할 수 없다면 바로 분석으로 넘어가는게 좋다. 워낙에 정보가 없는 .. 연산자 이니..) 1. class B { public: virtual ~B(); void operator delete ( void*, size_t ) t..
이번 항목은 표준 auto_ptr을 안전하고 효율적으로 사용하는 방법에 대한 기본적인 것들을 다룬다. C++ 세계에 있어, 이번 항목은 좀 특별하다. 왜냐하면 최종 C++ 98 표준안 : "Final Draft International Standard for Programing Language C++"이 완벽하게 결의되는 마지막 모임이 시작되는 전날에 auto_ptr의 이 문제점이 알려 졌기 때문이다. 그렇다면 이 문제가 무엇인지 알아보자! #include #include #include #include class T { public: bool operator( const T& rhs ) const { return rhs.a > a; } int value( void ) const { return a; }..
메모리에 대해서 얼마나 많이 알고 있나? 어떤 다른 메모리 영역이 있나? 이 문제는 C++의 주요한 독립적인 메모리 저장소에 기초를 두며, 좀 더 자세히 이해하여 메모리 관리를 보다 효율적으로 할 수 있는것에 초점을 둔다. 문제 : C++의 주요한 독립적인 메모리 저장소는 무엇이 있나? 해설 메모리 영역 특성들과 개체 활동 주기 상수 데이터(Const Data) 상수 데이터 영역은 문자열과 컴파일 시점에 값을 알 수 있는 다른 데이터들을 저장한다. 클래스 형식의 개체는 이 영역에 존재 할수 없다. 이 영역의 모든 데이터는 프로그램의 전체 활동주기 동안 가능하다. 게다가, 이 모든 데이터는 읽기 전용이므로, 이를 수정하면 정의되지 않은 결과가 나온다. 이곳에 저장을 하는것은 컴파일러에 의해 결정 되므로, ..
이 문제는 C++ 이디엄(idiom)으로 자주 추천 받고 있지만, 잘못 사용되면 심각한 문제가 발생할 수 있다는 것을 고려해야 한다. 이디엄을 보도록 하자. T& T::operator=( const T& other ) { if( this != &other ) { this->~T(); new (this) T( other ); } return *this; } 문제 이 코드는 어떤 일을 하기 위해서 작성 되었을까? 이 코드의 잘못된 점을 찾아 고쳐라 잘못된 점을 고치더라도, 이 이디엄이 안전한가? 안전하지 않다면 어떻게 해야만 프로그래머의 의도되로 될 수 있을까? 부연 설명 이 예제는 개체의 생성 법칙에 대하여 증명하기 위한 용도로 사용 될 뿐, 좋은 연습에 관련된 예제라고 추천하지 않습니다. 분석 (1). ..
이번 항목은 개체의 지금 존재 하는가? 존재 하지 않는가? 를 생각하게 한다. 개체가 존재하지 않은데 접근을 하면 에러가 날 수 있듯이, 어떨 때 달라지는지에 대해서 알아보자. template void f( void ) { T t( 1 ); T& rt = t; /* -- #1 : t 또는 rt에 관련된 어떤 것을 수행 -- */ t.~T(); new (&t) T(2); /* -- #2 : t 또는 rt에 관련된 어떤 것을 수행 -- */ } /* 여기서 t가 다시 소멸 된다. */ 이 코드의 #2 부분은 합법 적인가? 분석 이 코드는 합법적(문법이)이며, new (&t) T(2); 예외를 발생되지 않는 다면 매우 안전한 코드이다.^^ 여기서 짚고 넘겨야 하는 것은 t.~T(); 호출 후 ~ new (&t..
최근댓글