RAII는 자원의 수명을 객체의 수명에 묶는 관례다. 생성자에서 얻고 소멸자에서 놓으면, 반환과 예외가 어느 경로로 나가도 자원이 남는다.
unique_ptr
#include <memory>
auto ai = std::make_unique<Ai>(3);
ai->depth();
// 블록을 벗어나면 소멸자가 delete 한다`make_unique`는 예외가 나는 인자 평가 순서에서도 새는 구멍을 줄인다. `unique_ptr`은 복사되지 않고 이동된다. 배열을 가리키면 `unique_ptr<T[]>`를 써야 `delete[]`가 호출된다.
shared_ptr와 순환
`shared_ptr`는 마지막 소유자가 사라질 때 객체를 지운다. 두 객체가 서로를 `shared_ptr`로 붙들면 개수가 0이 되지 않는다. 역방향은 `weak_ptr`로 관찰하고, 쓸 때만 `lock`으로 잠깐 소유한다.
함수가 소유를 넘기면 `unique_ptr`를 값으로 반환한다. 소유를 받지 않는 함수는 `unique_ptr`를 매개변수로 받지 않고 참조나 포인터로 빌린다. 시그니처가 소유 이전을 말한다.
댓글
0개아직 댓글이 없습니다.