나는 unique_ptr의 벡터를 내가 만들고있는 클래스의 멤버로 갖고 싶습니다.unique_ptr의 벡터를 클래스 데이터 멤버로 선언하는 방법은 무엇입니까?
class Foo {
[...]
private:
vector<unique_ptr<Bar>> barList;
}
그러나 나는 VS2010 컴파일러에서 암호 같은 오류 메시지를 받기 시작 : std::_Copy_impl<>
의 마이크로 소프트의 구현에 뛰어 아래에서 에러 라인의 소수와 함께
error C2248: 'std::unique_ptr<_Ty>::operator =' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
...
회원 선언을
vector<unique_ptr<Bar>>* barList;
로 변경했습니다.
그리고 컴파일됩니다. 그러나 내가 원했던 방식으로 왜 그것을 할 수 없는지 궁금하지 않을 수 없다. 싱긋 웃음을 위해, 나는이 시도하고 그것을 잘 작동합니다 :
vector<Bar> barList;
하지만 지금은 unique_ptr
의 편의를 잃게됩니다. 나는 나의 케이크를 원하고 나는 그것을 역시 먹고 싶다!
나는 http://stackoverflow.com/questions/8553464/vector-as-a-class-member를보고 있었고 그 대답은 내가했던 것처럼 '벡터'선언을한다고 생각하는 것처럼 보인다. 그러나 어떤 이유로 인해 'unique_ptr'부분을 추가 할 때 불법 복제가 시작되는 것으로 보입니다. –
복사 생성자와 할당 연산자는 어떻게 생겼습니까? –
개인 지정이지만 복사 생성자가 범인입니다. 잘못된 소유권 의미론을 사용하고 있음을 깨달았을 때'unique_ptr'에서'shared_ptr'로 변경되었습니다. –