nềnSử dụng một con trỏ thông minh để quản lý cấp phát bộ nhớ trong chức năng
Nếu tôi có một hàm foo
như sau
void foo(std::vector<int>& values)
{
values = std::vector<int>(10, 1);
}
Sau đó, tôi có thể gọi nó như
std::vector<int> values;
foo(values);
ý rằng số vector
ban đầu trống, sau đó được điền trong hàm foo
.
tôi thường đi qua các giao diện mà tôi không thể thay đổi (tức là bên thứ 3), có ý định tương tự như trên, nhưng sử dụng các mảng thô, ví dụ
void foo(int*& values)
{
values = new int[10];
std::fill_n(values, 10, 1);
}
Vấn đề của tôi với những là bây giờ tôi chịu trách nhiệm quản lý bộ nhớ đó, vd
int* values;
foo(values);
delete[] values;
Câu hỏi
Có cách nào tôi có thể sử dụng con trỏ thông minh để quản lý bộ nhớ này cho tôi? Tôi muốn làm điều gì đó như
std::unique_ptr<int[]> values;
foo(values.get());
nhưng get
trả về một con trỏ đó là một r có giá trị, vì vậy tôi không thể vượt qua nó bằng cách tham chiếu không const.
Tôi không biết nếu điều này là hợp pháp nhưng nó biên dịch: http://coliru.stacked-crooked.com/a/860ae38fd2cdb4a2 – NathanOliver