'값에 의한 전달' 이란 무엇을 뜻하는 것일까? 함수에 전달되는 인자를 복사하여 전달되는 방식 '상수객체 참조자에 의한 전달'이란 무엇을 뜻하는 것일까? 포인터나 레퍼런스 즉 * 나 & 로 전달하는 방식을 뜻한다. 상수 이므로 const type * 나 const type& 을 뜻한다. 둘의 차이점이 있다면 무엇일까? 복사 할때 들어가는 비용에 차이가 있다. 값에 의한 전달은 전달되는 인자의 크기가 크면 클 수록 복사 되는 비용이 점점 많이 지불해야 할것이다. 하지만 상수객체 참조자는 주소값인 4Byte(64bit 환경에선 8Byte)의 비용만 지불하면 되기 때문에 그 비용은 일정하다. 또한 참조에 의한 전달 방식은 슬라이싱 문제(복사 손실 : Slicing problem)가 없어진다. 그렇다면 무엇이 ..
책 정리/Effective C++ 3판 검색 결과
클래스 설계? 타입 설계? C++에서 새로운 클래스를 설계하는다는것은 타입을 설계하는 것과 같다. 왜냐하면 그 클래스에는 operator 오버로드, 메모리 할당 및 해제, 객체 초기화 및 종료 등 모두 클래스에서 하기 때문이다. 타입은 어떻게 설계 할것인가? EC++ 3판에서는 많은 것들 중 고수들은 몇가지 질문을 스스로 던저 자신을 괴롭히며 만든다고 한다. 1. 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가? 2. 객체 초기화는 객체 대입과 어떻게 달라야 하는가? 3. 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에는 어떤 의미를 줄 것인가? 4. 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가? 5. 기존의 클래스 상속 계통망에 맞출 것인가? 6...
인터페이스 설계란 무엇을 말하는 것일까? 클래스의 접근 권한을 이야기 하는것이 아닌, 클래스나 함수, 템플릿의 사용 환경을 말하는것이다. 그렇다면, 엉터리로 쓰게인 어렵게 하자는 말이 도데체 무슨 말일까? void f(int a, int b) 라는 함수가 있다고 치면, 이 두개의 int형은 서로 다른 속성이 있을 것이다. 그런데 사용하는 입장에선 엉터리로 1번째 매개변수 자리에 2번재 매개변수를 넣어도, 함수는 그 데이터 그대로 받아들여, 원하는 연산을 해주지 않게 된다! 그래서, 햇갈려 하는 함수에는 int형이 아닌, 속성을 가진 int형을 넣어 버리면, 제대로 쓰기엔 쉽게 되고 엉터리로 쓰기엔 어렵게 된다!(값을 넣을때 형 변환을... ㅋㅋㅋ) 이런 마인드로 동적 메모리로 할당한 객체의 참조자를 리턴..
무슨말?(제목이 조금 길다) 객체 생성 직 후 스마트 포인터에 저장한 다음, 그 스마트 포인터로 사용하라는 뜻 왜!? 메모리 누수가 발생될 수 있기 때문이다. 언제? 함수의 매개변수로써 스마트 포인터를 받을 때, 함수의 매개변수가 초기화가 이루어지는 타이밍이 각각의 컴파일마다 다르기 때문에, 매개변수 초기화가 만약.. 1. 동적 메모리를 할당 예, new CBabo 처럼 2. 함수의 리턴값을 매개변수로 할당 예, sence() 3. 스마트포인터에 동적 메모리를 담는다. 예) Smart_PTR pw에 1번의 리턴 담음 바로 이때 2번에서 예외가 발생하면, .. 1번은 영영 잃어 버리게 된다. 이렇게 매개변수 초기화 타이밍이 각 컴파일마다 다르고 바뀔 수 도 있다. 그래서 매개변수의 초기화가 언제 발생 되는..
여기서 말하는 형태는 무엇인가? new 와 delete, new [] 과 delete [] 를 말한ㄷ. 왜 형태를 맞추어야 하는가? new 연산은 단일 객체 메모리 잡는 연산자이고 delete 역시 단일 객체 메모리 푸는 연산자이다. new[] 연산은 객체 배열을 메모리에 잡는 연산자이고 delete[] 역시 객체 배열을 메모리에 푸는 연산자이다. 만약 맞추지 않으면 어떻게 되는가? new [] 로 객체들 5개를 잡았고 delete 를 이용하면 1개의 객체만 풀어주고 나머지 4개는 프로그램 종료되기 까지 잡고 있는 어처구니 없는 사태가 발생한다. 굳이 주의해야 하는 것은? typedef 로 typedef std::string addressLines[4] 로 잡은 뒤 std::string *p = new ..
외부에서 접근하면 캡슐화가 무너지지 않나? RAII 방식의 객체의 경우 자원의 관리에 그 중점을 두었기 때문에, 그리고 설계상에 멤버 변수로써의 값으로 많이 쓰이기 때문에, 다 무너진다고 볼순 없다는게 저자의 견해이다. 개인적으로 참조자의 객체형은 외부 접근이 있는게 더 유용하다고 판단된다. 왜 더 유용한가? 자원이라는것이 엄밀히 말하면 메모리가 많은데, 윈도우 API에선 .. HDC, HPEN, ..... 등등 미칠듯이 많다. 이것들을 쓸때마다 외부접근이 안되버리면 .. 더 유용하지 않게 된다! 외부접근을 어떻게 해야 하는가? 크게 명시적 호출방법과 암시적 호출 방법이 존재한다. 명시적 호출 방법은 말 그대로 특정 멤버 함수를 이용하여, 자원의 참조자를 얻어 오는 방법이고, 암시적 호출 방법은 oper..
최근댓글