개발자의 길/Effective C++

[Effective C++] Chapter 3 자원 관리

토아드 2020. 2. 29. 20:23
반응형

항목 13: 자원 관리에는 객체가 그만!

 스마트 포인터를 활용하여 별도로 객체 관리를 하지 않아도 되도록 만들자. std::auto_ptr, std::shared_ptr 활용

 

항목 14: 자원 관리 클래스의 복사 동작에 진지하게 고찰하자

 RAII 객체를 복사할 , 복사를 수행한 원래 객체가 해제가 되어 버리면 복사를 객체 쪽에서 해제 객체를 가질 가능성이 있다. 레퍼런스 카운터를 쓰거나 복사를 금지하는 방법을 활용하자

 

항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 있도록 하자

 캡슐화는 사용하기 편하고 실수를 줄이기 위해 만든 것이지, 반드시 데이터를 무조건 접근 금지하도록 하기 위한 것은 아니다. 암시적 변환이나 Get() 함수등을 통해 접근을 가능하도록 만들면 해당 자원에 대한 API 사용할 있을 것이다

 

항목 16: new delete 사용할 때는 형태를 반드시 맞추자

 delete delete[] 쌍을 맞추자. 잘못하면 정의되지 않은 동작이 발생한다.

 

항목 17: new 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 문장으로 만들자

 shared_ptr 만들기 위해 shared_ptr( new Object() ) 같이 동적 할당을 경우에는, 해당 문장을 별도의 문장으로 만들도록 하자. 무슨 말이냐면 int val = SomeFunction( shared_ptr( new Object() ), getNumber() ) 같이 다른 동작을 함께하는 코드와 같이 넣지 말자는 말이다. c++ 컴파일러가 getNumber() 먼저 수행할지, shared_ptr 부분을 먼저 수행할지, Object() 부분을 먼저 수행할지 따로 정해진 사양이 없기 때문이다

반응형