본문 바로가기
반응형

Book & Lecture/Effective C++14

Effective C++ 항목19 : 클래스 설계는 타입 설계와 똑같이 취급하자 Effective C++ 항목19 : 클래스 설계는 타입 설계와 똑같이 취급하자 핵심 요약 클래스 설계는 타입 설계다. 새로운 타입을 정의하기 전에, 이번 항목에 나온 모든 고려사항을 빠짐없이 점검해보라 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가? 객체 초기화는 객체 대입과 어떻게 달라야 하는가? 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가? 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가? 기존의 클래스 상속 계통망(inheritance graph) 에 맞출 것인가? 어떤 종류의 타입 변환을 허용할 것인가? 어떤 연산자와 함수를 두어야 의미가 있을까? 표준 함수들 중 어떤 것을 허용하지 말 것인가? 새로운 타입의 멤버에.. 2023. 3. 13.
Effective C++ 항목18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 Effective C++ 항목18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 클래스를 설계할 때, 함수 인자가 비슷하면 실수할 우려가 있다! class Date { public: Date(int month, int day, int year); }; // month 와 day 를 거꾸로 적음. int형이기 때문에 정상적으로 프로그램이 진행된다.. Date d1(12, 3, 2023); // day를 31을 초과한 값으로 넣어줌. int형이므로 당연히 에러는 나지 않는다.. Date d2(3, 91, 2023); 위의 Date 클래스의 경우, 월과 일을 반대로 적거나 허용할 수 없는 값이 인자로 들어갈 수 있다. 심지어 컴파일 에러도 발생하지 않는다! 이러한 실수를 방지하려면 연.. 2023. 3. 12.
Effective C++ 항목14 : 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 Effective C++ 항목14 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 선요약 RAII 객체 복사는 자원을 어떻게 복사하는지에 따라 복사 동작 결정된다. RAII 클래스의 일반적인 복사 동작은 복사를 금지하거나 참조 카운팅을 해주어 처리할 수 있다. +@ 2023. 2. 27.
Effective C++ 항목13 : 자원 관리에는 객체가 그만! Effective C++ 항목13 자원 관리에는 객체가 그만! 선요약 1. 자원 누출을 막기 위해, 생성자 안에서 자원을 획득하고 소멸자에서 그것을 해제하는 RAII 객체를 사용하자 2. 항목13에서는 auto_ptr에 대해서 설명하지만, C++ 11 이후로는 auto_ptr을 사용할 수 없게 되었다. 이제는 unique_ptr을 사용하라 unique_ptr 유일하게 하나의 포인터만이 객체를 가리키도록 하고 싶다면 unique_ptr을 사용하라. std::move 연산자를 통해 소유권을 변경할 수 있다. shared_ptr 여러 포인터가 객체를 가리키도록 하고 싶으면서, 사용하지 않을 때 메모리 해제가 자동으로 되도록 하고 싶다면 shared_ptr을 사용하라. 참조 카운팅 방식이기 때문에 카운트가 0이.. 2023. 2. 26.
반응형