Cách thích hợp để chuyển quyền sở hữu của một std::vector<unique_ptr<int> >
cho một lớp học đang được xây dựng là gì?Cách thích hợp để chuyển quyền sở hữu của một tiêu chuẩn :: vectơ <std :: unique_ptr < int>> đến một lớp học đang được xây dựng
Dưới đây là mã đại diện cho những gì tôi muốn làm. Tôi nhận ra nó không chính xác (sẽ không biên dịch) và vi phạm "tính duy nhất" cho dù tôi truyền vectơ cho hàm tạo theo giá trị hay tham chiếu. Tôi muốn Foo là chủ sở hữu mới của vectơ, và muốn có chức năng gọi điện để từ bỏ quyền sở hữu. Tôi có cần người xây dựng để lấy số std::unique_ptr<std::vector<std::unique_ptr<int> > >
để làm điều này không?
foo.h
class Foo
{
public:
Foo(vector<std::unique_ptr<int> > vecOfIntPtrsOwnedByCaller);
private:
vector<std::unique_ptr<int> > _vecOfIntPtrsOwnedByFoo;
}
Foo.cpp
Foo::Foo(std::vector<std::unique_ptr< int> > vecOfIntPtrsOwnedByCaller)
{
_vecOfIntPtrsOwnedByFoo = vecOfIntPtrsOwnedByCaller;
}
Bất kỳ trợ giúp sẽ được nhiều đánh giá cao - Tôi đã lùng sục mạng tìm kiếm cách chính xác để làm điều này. Cảm ơn!
'std :: vector> 'đòi hỏi một trong hai tạm thời hoặc người gọi sử dụng 'std :: move' trên vector của riêng họ, vì nó không thể được sao chép. Nếu bạn muốn làm cho nó thực sự rõ ràng, hãy xem xét' std :: vector <...> && '. Sau đó, di chuyển vào thành viên của bạn (trong thành viên-initializers!) Với 'std :: move'. –
Xeo
Bạn có muốn vectơ được sở hữu độc quyền hay các phần tử chứa trong đó không? –
Cuộc đua nhẹ nhàng trong Orbit - Cả hai. – Jen