이동 전용 유형을 사용한 벡터 초기화
G는 벡터 초기화에서 Unique_ptr 객체 복사를 시도하지만 복사 생성자로 인해 실패합니다. 접근이 불가능한 상태. 오류 메시지는 복사할 수 없는 객체를 복사하려고 시도하는 문제를 정확하게 강조합니다.
이동 반복자 활용
이 문제를 해결하려면 이동 반복자를 활용하면 됩니다. 역참조된 요소:
using move_only = std::unique_ptr<int>; move_only init[] = { move_only(), move_only(), move_only() }; std::vector<move_only> v{std::make_move_iterator(std::begin(init)), std::make_move_iterator(std::end(init))};
도우미 고용 유형
또는 도우미 유형을 활용하여 초기화 시 이동 의미를 얻을 수 있습니다.
template<class T> struct rref_wrapper { explicit rref_wrapper(T&& v) : _val(std::move(v)) {} explicit operator T() const { return T{std::move(_val)}; } T&& _val; }; // Only usable on temporaries template<class T> typename std::enable_if< !std::is_lvalue_reference<T>::value, rref_wrapper<T> >::type rref(T&& v) { return rref_wrapper<T>(std::move(v)); } std::initializer_list<rref_wrapper<move_only>> il{rref(move_only()), rref(move_only()), rref(move_only())}; std::vector<move_only> v(il.begin(), il.end());
위 내용은 C에서 이동 전용 유형을 사용하여 벡터를 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!