gpt4 book ai didi

c++ - 使用智能指针管理函数内分配的内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:35 24 4
gpt4 key购买 nike

背景

如果我有一个函数 foo 如下

void foo(std::vector<int>& values)
{
values = std::vector<int>(10, 1);
}

那么我可以称它为

std::vector<int> values;
foo(values);

注意初始 vector 是空的,然后它被填充到函数 foo 中。

我经常遇到我无法更改的接口(interface)(即第 3 方),其意图与上述相同,但使用原始数组,例如

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 返回一个右值指针,所以我不能通过非常量引用传递它。

最佳答案

  1. 创建空的 unique_ptr。
  2. 创建指针。
  3. 将指针传递给函数。
  4. 将 unique_ptr 重置为该指针。

像那样:

std::unique_ptr<int[]> values;
int* values_ptr;
foo(values_ptr);
values.reset(values_ptr);

或者:

int* values_ptr;
foo(values_ptr);
std::unique_ptr<int[]> values(values_ptr);

关于c++ - 使用智能指针管理函数内分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33693173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com