gpt4 book ai didi

c++ - 遗留函数的 unique_ptr 用法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:50 27 4
gpt4 key购买 nike

考虑代码

struct Resource
{
Resource()
{
std::cout << "C";
}
~Resource()
{
std::cout << "D";
}
};

void allocate(Resource **p)
{
*p = new Resource();
}

int main()
{
Resource *p = nullptr;
allocate(&p);
std::unique_ptr<Resource> uptr(p);

//stuff
}

假设“allocate”函数在多个调用站点的遗留代码中大量使用,main 函数显示尝试使用 unique_ptr 来管理分配的资源。当团队中的另一位程序员在“allocate”之后和“unique_ptr”拥有它之前编写了容易出现异常的代码时,就会出现问题。

因此,我想到的一种解决方案是编写如下利用逗号运算符的代码

std::unique_ptr<Resource> up((allocate(&p), p));

还有其他合理的方法来处理这种情况吗?基本问题是将分配和所有权作为原子操作。

最佳答案

为了最平滑的过渡,创建一个 allocate 的重载:

template <typename T>
void allocate(std::unique_ptr<T>* p) {
T* raw;
allocate(&raw)
p->reset(raw);
}

现有调用站点将继续保持不变。更新调用站点时,将原始指针替换为 unique_ptr,并删除释放资源的任何行,但保持代码不变。 (将原始指针传递的地方替换为 .get()。)

关于c++ - 遗留函数的 unique_ptr 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21142034/

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