背景
如果我有一个如下的函数foo
void foo(std::vector<int>& values)
{
values = std::vector<int>(10, 1);
}
然后我可以将其称为:
std::vector<int> values;
foo(values);
请注意,初始的vector
为空,然后在函数foo
中填充。
我经常遇到无法更改的接口(即第三方接口),它们具有与上述相同的意图,但使用原始数组,例如
void foo(int*& values)
{
values = new int[10];
std::fill_n(values, 10, 1);
}
我的问题是现在我需要负责管理这些内存,例如:
int* values;
foo(values);
delete[] values;
问题
有没有办法使用智能指针来管理我的内存?我想做类似这样的事情:
std::unique_ptr<int[]> values;
foo(values.get());
但是 get
返回的是一个 r-value 指针,所以我不能通过非 const 引用传递它。