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

时间:2016-11-07 22:54:01

标签: c++ c++11 pointers

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

DalSoft.RestClient

但问题是它期望函数的返回值是一个int原始指针而不是int unique_ptr,这意味着如果我的函数看起来像

我只能编译它
void LegacyFunction(int* (*func)(float, float), int a, float b);

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

int* MyFunc(float a, float b);

并将其传递给遗留库函数,如

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

会出现编译错误。我知道如果该函数采用通常的int指针,可以使用LegacyFunction(MyFunc, 1, 2.0f); 函数进行一些解决方法,如

get()

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

1 个答案:

答案 0 :(得分:5)

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

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

但仅当LegacyFunction自然删除/释放MyFunc使用适当操作分配的内存时(如果MyFunc使用new int LegacyFunctiondelete retval;必须使用new int[x];如果使用delete[] retval;,则必须使用unique_ptr)。

The release method获取所包含的指针并放弃所有权,因此您明确放弃了{{1}}的保护;如果你能避免它,那不是一个好主意。