gpt4 book ai didi

c++ - 如何将返回 unique_ptr 的函数转换为原始指针?

转载 作者:行者123 更新时间:2023-11-30 01:09:19 25 4
gpt4 key购买 nike

假设我想使用遗留库中的一个函数,它需要一个函数指针作为输入

void LegacyFunction(int* (*func)(float, float), int a, float b);

但问题是它期望函数的返回值是一个 int 原始指针而不是一个 int unique_ptr,这意味着我只能在我的函数看起来像这样的情况下才能编译它

int* MyFunc(float a, float b);

换句话说,如果我将 MyFunc 修改为

std::unique_ptr<int> MyFunc(float a, float b);

并将其传递到遗留库函数中

LegacyFunction(MyFunc, 1, 2.0f);

会出现编译错误。我知道如果该函数采用普通的 int 指针,则可以使用 get() 函数来解决一些问题,例如

std::unique_ptr<int> a;
LegacyFunctionRawPointer(a.get(), 1, 2.0f);

函数指针输入是否有类似的解决方法?如果我必须用原始指针替换 MyFunc 的 unique_ptr,那将是一种讽刺。

最佳答案

lambda 函数应该可以工作,例如:

LegacyFunction([](float a, float b) { return MyFunc(a, b).release(); }, 1, 2.0f);

但前提是 LegacyFunction 会自然地删除/释放 MyFunc 通过适当操作分配的内存(所以如果 MyFunc 使用了 new intLegacyFunction 必须使用delete retval;;如果使用了new int[x],则必须使用 delete[] retval;).

The release method获取包含的指针并放弃所有权,因此您已明确放弃 unique_ptr 的保护;如果可以避免,这不是一个好主意。

关于c++ - 如何将返回 unique_ptr 的函数转换为原始指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40476145/

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