의 const와을 보장하기 위해 어떻게 관련 질문 here 물었다. 이제 조금 더 미묘합니다. 여기 복귀 벡터 <unique_ptr>
코드입니다 :class MyClass {
public:
const vector<unique_ptr<MyObject> >& get_const_objs() const;
private:
vector<unique_ptr<MyObject>> m_objs;
};
내 의도는 get_const_objs에서 반환 된 벡터()가 호출 여전히 수 읽기 전용,하지만 벡터의 요소에서 const되지 않기 때문에 문제가 그렇게된다는 것이다 개별 요소를 변경하십시오.
const vector<unique_ptr<MyObject>>& objs = pMyClass->get_const_objs();
unique_ptr<MyObject> p = move(objs[0]);
내 솔루션은 벡터에 const를 삽입하는 것입니다
const vector<const unique_ptr<MyObject> >& get_const_objs() const;
하지만이 나는 새로운 벡터 각 요소를 복사 get_const_objs()의 지루한 구현에 이르게 :
const vector<const unique_ptr<MyObjects>>& MyClass::get_const_objs() const
{
vector<const unique_ptr<MyObjects>> ret;
for (const auto &obj : my_objs) {
ret.push_back(obj);
}
return ret;
}
예, 나는 MyClass에에 반복자 인터페이스를 추가 할 수 있습니다. 다른 해결책이 있습니까?
나는 제한이 있습니다 BOOST 사용할 수 없습니다. 하지만 실제로 표준을 사용하는 것이 좋으면 BOOST 솔루션을 알고 싶습니다.
. 그리고'unique_ptr p = move (objs [0]);'가 컴파일되지 않습니다. –
chris
질문을 올바르게 이해하면 '벡터'가 보유한 객체가 변경되지 않도록하는 방법을 찾으려합니다. 그렇다면 제목이 약간 잘못된 것입니다. –
이미 벡터 내부의 요소를 해당 벡터에 대한 const 참조를 통해 수정할 수 없습니다. 포인터가 가리키고있는 MyObject의 수정을 막는 방법에 대해 이야기하고 있습니까? –