Effective C++
-
항목6 : 복사생성자 및 대입연산자 제한@ 16. 1 ~ 17. 1/Effective C++ 2015. 1. 14. 22:42
기존의 private 상태로 복사생성자(const 복사생성자&); 대입연산자& operator=(const 대입연산자&); 였던 방법말고도.. 상속을 활용하면서 class A { protected: A(){} ~A(){} private: A(const A&); //복사 생성자 A& operator=(const A&); //대입연산자 }; class B : private A { public: B(){} int num; }; 이런식으로 활용한다..
-
항목4 : 객체를 사용하기 전에 반드시 그 객체를 초기화하자@ 16. 1 ~ 17. 1/Effective C++ 2013. 8. 25. 21:16
int x; 어떤 상황에서는 x의 값이 확실히 초기화되지만 또 다른 상황에서는 그것이 보장되지 않는다는 것입니다. 어떤 플랫폼의 경우에는 미초기화 객체를 읽기만 해도 프로그램이 서 버리기도 합니다. 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화하는 것이다. int x =0; const char *text="welcome to"; double d; cin >> d; //입력스트림에서 읽음으로써 초기화 수행 이런 부분을 제외하고 나면 c++ 초기화의 나머지 부분은 생성자로 귀결된다. 초기화를 하면서 대입과 초기화를 헷갈리지 않는 것이 가장 중요하다. 생성자에서 초기화는 멤버 초기화 리스트를 사용하는 것이며 그 외의것은 대입이 되고 있는 것이다. class Rational{ public: Ratio..
-
항목 20 : 값에 의한 전달 보다는 상수객체 참조자에 의한 전달방식을 택하는 편이 낫다@ 16. 1 ~ 17. 1/Effective C++ 2013. 8. 19. 22:06
기본적으로 C++는 함수로부터 객체를 전달받거나 함수에 객체를 전달할 때 값에 의한 전달(pass by value)방식을 사용한다. 특별히 다른 방식을 지정하지 않으면 함수 매개변수는 실제 인자의 사본을 통해 초기화되며, 어떤 함수를 호출한 쪽은 그 함수가 반환한 값의 사본을 돌려받는다. 이들 사본을 만들어내는 원천이 바로 복사생성자라고 한다. 그래서 값에 의한 전달이 고비용의 연산이 된다고 한다. 그래서 고비용을 없애기 위해 상수객체에 대한 참조자로 전달하게 만드는것이다. void 함수(매개변수 : const 객체명& a); 이렇게 하면 새로 만들어지는 객체 같은 것이 없다. 여기서 새겨둬야 할 부분은 매개변수 선언문에 있는 const이다. 원래의 값에 의한 전달이라면 void 함수(매개변수 : 객체명..