2012-06-20 2 views
1

C++ 11 설명서를 읽는 데있어 불분명 한 점에 대한 의견이 있습니다.클래스 멤버 포인터에 대해 unique_ptr을 사용해야합니까?

+5

확실히 할 수 있지만이 방법을 사용할지 또는 대안을 사용할 지에 따라 달라집니다. 제어하는 포인터의 소유권 의미 란 무엇입니까? –

+2

이 질문에 답을 얻으려면이 질문을 더 자세히해야합니다. * 가능한지 궁금합니다 *? 즉, 'unique_ptr' 멤버를 만들면 문제가 발생합니까? 아니면 좋은 생각인지 묻는거야? 그렇다면 어떤 상황에서? –

답변

1

물론입니다. 그러면 rule of three이 처리됩니다.

+0

'unique_ptr' 데이터 멤버가 있으면 자동으로 올바른 기본 소멸자를 얻음을 의미하지만 기본 복사본 구성 및 복사본 할당이 불가능 해집니다. – jogojapan

+1

@jogojapan : 자네는 이동 공사를하고 무료로 과제물을 옮기므로, 빈 손으로 남겨 두지 않아. ; -] – ildjarn

+1

@Nikolai : 헤더에'unique_ptr'의 페이로드 클래스를 정의한 경우에만. 대부분의 경우 개인 클래스를 게시하지 않아도되도록 handle/pimpl 포인터 관용구를 사용합니다. 이 경우, 여전히'unique_ptr'을 사용할 수 있지만, 디폴트 및 복사 생성은 물론, 라인 밖의 파기 및 복사 할당 (copy-swap 트릭을 사용하여 인라인 가능)을 구현해야합니다. 물론 shared_ptr만이 Deleter에 대해 수행되는 유형 삭제 때문에 다른 규칙과는 달리 3 가지 규칙 (C++ 11 규칙 5)을 처리합니다. –

관련 문제