Tôi muốn có một vectơ con trỏ tới các đối tượng trong lớp của tôi. Để tránh làm cho một destructor cho nó tôi muốn sử dụng std::unique_ptr
, như các đối tượng được tạo ra/sở hữu/destructed trong lớp học của tôi, nhưng tôi có một lỗi biên dịch tôi không thể hiểu được. mã tiếp theo sẽ đóng vai trò như một mẫu ngắn cho vấn đề của tôi:Cách sử dụng chính xác của std :: unique_ptr trong khi đẩy vào std :: vector
std::unique_ptr<int> createPtr(int value)
{
std::unique_ptr<int> ptr(new int(value));
return ptr;
};
int main()
{
std::vector<std::unique_ptr<int>> vec;
vec.push_back(createPtr(1));
std::unique_ptr<int> ptr = createPtr(2);
vec.push_back(ptr);//error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
}
bạn có thể vui lòng giải thích cho tôi tại sao tôi nhận được lỗi này và cách sử dụng chính xác cho std::unique_ptr
là gì?
Điểm lưu trữ con trỏ tới 'int' thay vì giá trị trong vector là gì? –
Nếu bạn đang dự tính 'std :: unique_ptr <>', thì bạn có thể làm * không * có một "vectơ của các đối tượng", nhưng là "vectơ của con trỏ tới các đối tượng". Nếu bạn có một "vectơ vật thể", thì sự hủy diệt sẽ tự động xảy ra một cách chính xác. –
@TadeuszKopec Hãy đọc câu hỏi – Felics