Hãy nói rằng tôi có một shared_ptr
để một mảng:Gán một shared_ptr đến một bù đắp của một mảng
std::shared_ptr<int> sp(new T[10], [](T *p) { delete[] p; });
Và một phương pháp:
shared_ptr<T> ptr_at_offset(int offset) {
// I want to return a shared_ptr to (sp.get() + offset) here
// in a way that the reference count to sp is incremented...
}
Về cơ bản, những gì tôi đang cố gắng làm là trả về một số shared_ptr
mới làm tăng số lượng tham chiếu, nhưng trỏ đến một offset của mảng ban đầu; Tôi muốn tránh có mảng bị xóa trong khi một người gọi đang sử dụng mảng tại một số bù đắp. Nếu tôi chỉ trả lại sp.get() + offset
điều đó có thể xảy ra, phải không? Và tôi nghĩ rằng việc khởi tạo một shared_ptr
mới để chứa sp.get() + offset
cũng không có ý nghĩa.
Mới đối với C++, vì vậy, không chắc liệu tôi có đang tiếp cận chính xác điều này hay không.
Tôi khuyên bạn nên sử dụng 'std :: array' thay vì mảng thô. Điều đó cho phép bạn sử dụng 'std :: make_shared' và tránh deleter tùy chỉnh:' auto p = std :: make_shared>(); std :: shared_ptr p2 {p, & p-> at (n)}; ' –
Ah okay thuận tiện hơn yeah – ujvl
Câu hỏi đó là một câu hỏi thực sự hay. Tôi chưa bao giờ gặp vấn đề trước đây nhưng tôi biết ơn vì tương lai. – ZeroUltimax