3. Resource Management

13. Use objects to manage resources.

raw 포인터를 쓰지 말고, std::unique_ptr이나 std::shared_ptr인 RAII 오브젝트를 이용하라.

  • 자원 누수를 막기 위해, 생성자에서 자원을 얻고 소멸자에서 자원을 해제하는 RAII 오브젝트를 사용하라.
  • 범용적으로 유용한 RAII 오브젝트는 std::unique_ptr과 std::shared_ptr이다.

14. Think carefully about copying behavior in resource-managing classes.

std::mutex나 std::unique_ptr 등은 이동만 가능하지 복사가 되지 않는다. RAII 클래스를 복제할 때에는 이동만 제공하거나, 참조 카운트를 제공하라.

  • RAII 오브젝트를 복사하는 것은 그것이 다루는 자원을 복사하는 것이다. 즉 자원을 어떻게 넘겨줄 것이냐가 RAII 오브젝트의 복사를 결정한다.
  • 일반적인 RAII 오브젝트는 복사를 막거나 참조 카운트를 제공하지만, 다른 방법도 가능하다.

15. Provide access to raw resources in resource-managing classes.

std::unique_ptr이나 std::shared_ptr은 .get() 등으로 그것이 다루는 자원에 대한 직접적인 접근을 제공한다. 자원을 다루는 클래스는 이러한 API를 제공해야 한다.

  • API는 로우 자원에 대한 접근을 필요로 하는 경우가 많기 때문에, RAII 클래스는 그것이 다루는 자원을 다루는 법을 제공해야 한다.
  • 이러한 접근은 명시적 변환 또는 묵시적 변환으로 제공할 수도 있다. 명시적 변환이 더 안전하지만, 묵시적 변환은 더 편리하다.

16. Use the same form in corresponding uses of new and delete.

new와 delete, new[]와 delete[]는 반드시 짝을 맞추어 사용해야 한다. 그렇지 않을 경우의 행동은 정의되어 있지 않다.

  • new와 delete, new[]와 delete[]는 반드시 짝을 맞추어 사용해야 한다.

17. Store newed objects in smart pointers in standalone statements.

RAII를 위해 일반적 new를 사용하지 말고 일반적 new로 생성된 오브젝트가 있다면 std::unique_ptr, std::shared_ptr 등의 스마트 포인터에 저장하라.

  • new로 생성된 오브젝트가 있다면 스마트 포인터에 저장하라. 아니면 예외가 던져졌을 때 자원 누수가 될 수 있다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중