将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;
}

将List转换为c++ /CLI的非托管数组

代码是正确的。您分配了正确的内存量。我想用sizeof int代替4,它更有表现力。

我想知道你为什么要用AllocHGlobal。我认为new在c++代码中更合适。我也想知道你为什么要用原始指针。在c++代码中std::vector<int>不是更有意义吗?