본문 바로가기
반응형

Book & Lecture24

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.
Effective C++ 항목12 : 객체의 모든 부분을 빠짐없이 복사하자 Effective C++ 항목12 : 객체의 모든 부분을 빠짐없이 복사하자 선요약 객체 복사 함수는 주어진 객체의 모든 데이터를 복사해야한다. 모든 데이터 멤버 상속 받았다면 기본 클래스 부분 클래스의 복사 함수를 두 개 구현할 때, 한 쪽을 이용해서 다른 쪽을 구현하려는 시도는 절대금지. 대신에 공통된 동작을 제3의 함수에 분리해놓고 양 쪽에서 이를 호출하게 만들어서 해결한다. 복사생성자와 복사 대입 연산자를 통틀어 객체 복사 함수라고 부른다. 개발자가 직접 복사 함수를 만들 때에는 클래스가 완전히 복사되지 않더라도 컴파일러가 에러나 경고를 표시하지 않는다. void logCall(const std::string& funcName); class Customer { public: ... Customer(.. 2023. 2. 19.
Effective C++ 항목11 : operator에서는 자기대입에 대한 처리가 빠지지 않도록 하자 Effective C++ 항목11 operator에서는 자기대입에 대한 처리가 빠지지 않도록 하자 선 요약 operator=함수를 구현할 때, 자기대입을 제대로 처리하도록 하자. 객체간의 주소 비교 호출 순서를 적절히 조절 "복사 후 맞바꾸기" 기법 두 개 이상의 객체에 대해 동작하는 함수가 있다면, 이 함수에 넘겨지는 객체들이 사실 같은 객체인지 정확하게 체크하자. class Widget{ ... } Widget w; ... w = w // 자기에 대한 대입 위와 같이 C++에서는 자기 자신을 대입하는 자기대입이 적법(legal)하다. 자기대입은 여러 곳에서 하나의 객체를 참조하는 상태, 즉 중복참조라고도 불린다. 중복참조란? class Base { ... } class Derived { ... } v.. 2023. 2. 18.
반응형