이유 1. 만약 어떤 특정 개체의 수가 10개로 한정되어 있다면? 그럴때 써먹으면 좋다.(현실에서도 이런일들이 많듯이) 개념정리 객체 생성이 이루어지는 세가지 상황 1. 일반적인 객체 생성할 때 2. 파생 클래스에서 객체를 생성 할때 3. 다른 클래스에서 객체를 멤버 변수로 가지고 있을 때 객체를 전혀 생성하지 않거나 한개만 생성하기 1. 객체의 생성을 특정 함수에서만 이루어 지도록 하고, 그 함수에서 static으로써 객체를 생성하면 된다. (부수적으로 생성자를 private 로 만들면, .. 상속도 안되게 할수 있다) 객체의 생성갯수를 원하는 갯수로 제한하기 1. 개념정리의 3가지 경우를 세면 된다. 2. 다른 클래스의 객체들의 갯수까지 제한하기 위해선 이것을 클래스화 시켜서 private로 상속 하..
More Effective C++ 검색 결과
이유 1. 만들수 있으면 써먹을수 있다. 1. 가상 생성자 만드는 방법 가상 생성자란 무엇이며, 왜 필요한가? 1. 생성자는 virtual 키워드가 먹히지 않는다. 2. 가상 생성자는 마치 생성자가 가상함수가 된것처럼 행동하는 생성자를 뜻한다. 3. 인자값에 따라 원하는 객체가 자동으로 생성되기 때문에, 편리하다. 구현방법 준비물 1. 기본 클래스 1개. 파생 클래스 A, 파생클래스 B 2. 관리 클래스 1개 3. 강하게 필요하여, 반드시 구현해야 한다는 미친 열정 세부 구현방법 1. 관리 클래스에서 인자값에 따라서 파생 클래스 A나 B를 동적메모리를 할당하고, 기본클래스의 포인터로 반환 2. 관리 클래스의 링크드 리스트에 1의 포인터를 저장한다. 비멤버 함수를 가상 함수처럼 동작하게 하는 방법 왜 필요..
Effective C++ 때부터 가이드라인형식으로 저자가 집필했다면 이 장에서는 좀 색다른 기법들을 배운다. 난 기법보다는 기교라고 불루는데, 감탄이 절로 나오는게 많기 때문이다. 1. 생성자 함수와 비멤버 함수를 가상 함수처럼 동작하는 방법 2. 클래스의 객체의 개수를 제한하는 방법 3. 객체가 힙에서만 만들어 지는 방법 4. 3번의 반대로 힙에서는 못만들어 지게 하는 방법 5. 다른 클래스의 멤버 함수가 호출될 때마다 특정한 동작을 수행하는 객체를 만드는 방법 6. 여러 객체가 하나의 자료구조를 궁유하도록 하되 사용자 쪽에서는 객체 하나마다 자료구조가 하나씩 있는것처럼 보이게 하는 방법; 7. operator[]의 읽기와 쓰기 기능을 구별하는 방법 8. 둘 이상의 객체의 독적 타입에 맞추어 동작하는 ..
부재 : virtual 의 비용은 얼마인가? 이유 1. 구현에 따라 가상 함수(virtual function)가 성능에 영향을 미치기 때문이다. 구현방법 : 구현 방법은 없으며 개념 정리된 부분을 이해 하고 있어야 한다. 개념 정리 1. 가상 함수를 사용하면 가상 테이블(virtual table)과 가상 테이블 포인터(virtual table pointer)가 생긴다. (객체의 한쪽에 vtbl 을 가르키는 vptr이 만들어 진다) 2. 구현 방법에 따라 이 vtbl은 객체의 크기와 멤버 함수가 실행될 때의 속도에 영향을 끼친다. 3. 가상함수는 인라인 효과를 얻을 수 없다. 4. 가상상속(다이아몬드 상속을 피하기 위해)을 하면, 가상 기본 클래스의 포인터도 객체에 포함되어 덩치가 커진다. 5. RTTI는..
부재 : 단독 연산자 보단 =이 붙은 연산자가 대체적으로 효율적이였다! 이유 1. 일반적으로 대입 형태 연산자는 단독 혀애 연산자보다 효율적이다. 왜냐하면, 단독 형태 연산자는 새 객체를 반환하는 형식으로 만들어야 하지만, 대입 형태 연산자는 왼쪽 인자에다가 처리 결과를 기록하기 때문에, 이 연산자의 반환값을 담을 임시 객체를 만들어 놓을 필요가 없기 때문이다. 2. 포인터는 대입 형태 연산자와 단독 형태 연산자를 동시에 제공함으로써 클래스 사용자에게 효율과 편리성을 경우에 따라 저울질할 기회를 줄수 있다는 것 예) result = a + b + c+ d; // 세 개의 임시 객체가 사용되는데 임시 객체 하나마다 operator+가 호출된다. Or result = a; // 임시 객체가 필요 없다. re..
최근댓글