将List转换为c++ /CLI的非托管数组
本文关键字:数组 CLI List 转换 c++ | 更新日期: 2023-09-27 18:06:12
我正在为c++/CLI函数创建一个。net包装器类。在内部,该函数使用一个整数数组(int*
),但我想在。net端公开一个干净的List<int>^
。我使用下面的代码将c#列表转换为c++的非托管int列表。
除了我没有使用Marshal::FreeHGlobal
释放分配的内存这一事实之外,该函数是否有任何问题?例如,我应该为数组长度字节分配((count * 4) + 4)
吗?
static int* ListToArray(List<int>^ list){
// new array
int count = list->Count;
int* arr = (int*)(Marshal::AllocHGlobal(count * 4).ToPointer());
// convert list to array
for(int a = 0; a < count; a++){
arr[a] = list[a];
}
return arr;
}
代码是正确的。您分配了正确的内存量。我想用sizeof int
代替4
,它更有表现力。
我想知道你为什么要用AllocHGlobal
。我认为new
在c++代码中更合适。我也想知道你为什么要用原始指针。在c++代码中std::vector<int>
不是更有意义吗?