假设我有一个长这样的函数:
void *func(){
int *a = new int;
*a = 1;
void *b = a;
return b;
}
在我的主函数中,我可以像这样使用它
int *test = reinterpret_cast<int *>(func());
std::cout << test[0] << std::endl;
delete test;
并且它将打印正确的结果。假设我想在我的函数中使用unique_ptr,那么它就变成了
std::unique_ptr<void> func(){
std::unique_ptr<int> a(new int);
*a = 1;
std::unique_ptr<void> b = a; // does not compile
return b;
}
它会抛出编译错误。
error: conversion from ‘std::unique_ptr<int>’ to non-scalar type ‘std::unique_ptr<void>’ requested
在这种情况下,我该怎么做才能让unique_ptr正常工作?
unique_ptr<void>
的语义是什么? - Brian Biint*
,为什么要从函数返回void*
? - Brian Bivoid*
部分,让你的类型明确无误。 - Baum mit Augenunique_ptr<int>
来管理所有权,并且在向传统API传递时将所管理的int*
转换为void*
。 - Brian Bi