이 포스트를 만든 목적 미루고 미루고 미루왔던 이전 글에 대한 피드백을 위해 만들었다. C++ 공부를 되돌아 보기 위해서 보다 훌륭한 프로그래머가 되기 위해서 이 포스트의 준비 상황 C++ 문법 이 포스트 전의 상황 쓸만한 C++ 컴파일러 SyntaxHighlight 쉽게 쓰려고 존댓말 생략 gVim 7.2 참조 링크 http://www.gamza.net/bbs/view.php?id=Article&no=16 http://gpgstudy.com/forum/viewtopic.php?t=3332 참조 서적 Exceptional C++ 서론 1년 전쯤에 감자넷에서 "객체 초기화"를 소멸자로 초기화 하는 글을 읽고 댓글을 달았었다. 얼마후 댓글에 댓글이 달린것을 보게 되었고, 차이점에 대해서 코드를 남겨서 확인해..
객체 검색 결과
저번장까지는 설계에 관한 이야기보다는 상속시 유의해야 되는 부분이 강조되었다면, 이번 항목은 .. 설계에 관한 부분이다. 나는 지금까지 private 상속이면 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 이고 클래스 내부에서 객체선언하면 "has-a(...는...를가짐)" 이다 라고 이해했지만, 이것은 잘못된 이해이다. 각각은 추상화된 설계 패턴의 일부분이라는 것이다. 이 패턴 들은 객체 합성으로(.. 이라고 불리지만, 레이어링, 포함 통합 내장 으로도 불린다)으로 만들수 있다는 것이다. 그렇다면 다시 제목을 봐보자.. 항목 38: "has-a(...는...를가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화 할 ..
여기서 "그만" 이라는 뜻은, "적격"이다라는 뜻이다. 왜 객체가 적격일까? 그 이유는 스택에 올라간 객체는 Scope(존재 할수 있는 범위)가 있어, 자신의 Scope를 벗어나면, 소멸자가 호출이 된다. 이 소멸자에서 자원을 반환해 주는 코드를 넣어주면, 자원의 얻고, 반환을 자동화 시킬수가 있기 때문이다. 자원 관리 객체의 기본적인 구조 처음은 생성자에서 동적메모리 할당으로 얻은 주소값를 인자로 객체를 생성과 동시에 초기화 한다. 자원 획득은 초기화!(Resource Acquisition Is Initization : RAII, 비야네 스트롭스트룹 은 이 용어를 처음 제시했고, TC++PL의 14장에서 그 견해를 들을수 있다고 한다.) 끝으로 소멸자에서 이 자원을 delete 해 준다. 이렇게 하면 ..
부재 : 멤버 객체의 생성 시점과 초기화와 시점 이유 1. 초기화 되지 않은 객체 사용시, 신비롭게 동작하는 현상을 볼수 있기 때문이다. 멤버 객체 생성 시점 1. 초기화 리스트 발동 시점에 생성 된다. 주의점 1. 상수나 참조자는 대입 자체가 불가능하기 때문에 초기화 리스트를 사용하여 초기화 하여야 한다. 2. 멤버 초기화 리스트에서 초기화 하는것이 더 좋다. 왜냐하면 멤버 초기화 리스트는 객체의 생성단계이기 때문이다. 3. 클래스에 나열한 객체의 순서대로 객체가 생성되므로 초기화 리스트 작성시 유념해야 한다. (단순한 초기화 라면 문제는 없지만, 멤버객체를 이용한 객체 초기화 시에는 문제 발생이 생긴다. 증명 소스코드는 참조링크를 확인할것) 참조 1. 멤버 초기화 리스트란? 코드의 주석을 보면 이해가..
이유 1. 임베디드 시스템에서 메모리량이 적을 때 사용하면 좋다. 힙에만 생성되게 하는 방법 1. new만을 써서 객체를 생성하면 된다. 2. 유사 소멸자도 만들어야 한다. 힙에는 만들어지지 않게 하는 방법 1. operator new 를 오버로딩 하되 private으로 넣어 둔단다. 주의점 1. 상속이나 다른 클래스 내부에서 생성될때도 객체가 생성되기 때문에 코딩시 이 부분은 피해야만 한다. 부수적으로 알아야 할것들 1. 해당 객체가 힙에 있는지 없는지 체크 할 방법이 있어야 한다. 2. 1번의 방법은 객체 생성시 그 주소값을 리스트에 넣고 관리하면 된다. 필요하다면, 구현 할수 있을것 같다.(훗 그러다가 된통 달할것 같기도 하다. ㅋㅋㅋ) 개념적으로만 정리하고 끝낸다.,
부제 : auto_ptr 효과적으로 사용 해라. 이유 1. 생성단계에서 동적메모리 할당시 메모리 릭이 발생할수 있기 때문이다. 구현 방법 1. 역시 메모리 할당을 auto_ptr(이런 성격의 객체)이 받으면 된다. 예) auto_ptr test; 선언 후 초기화 리스트에서 초기화! new를 호출하여 초기화 주의점 1. auto_ptr 사용시 소유권이란 개념이 분명히 존재하므로 잘 이해하고 적재적소에 써야 한다. 개인적인 생각 1. 클래스 내부에서 메모리 누수를 막는 방법이 제일 좋은것 같다. 왜냐하면 객체의 생성 자체가 메모리 할당을 동반하는 작업이 많이 때문이다. 클래스 외부에서 이런 메모리 누수처리를 한다면, 정말 힘든 세상이 될것같다. 집안 싸움은 집안에서 끝내야 한다는 속담이 떠오른다. 참조 사항..
최근댓글