C# 将列表转换为C++/CLI

C# 将列表转换为C++/CLI,c#,.net,list,visual-c++,c++-cli,C#,.net,List,Visual C++,C++ Cli,我正在为C++/CLI函数创建一个.NET包装器类。函数内部使用一个int数组(int*),但我想在.NET端公开一个干净的List^。我使用下面的代码将C++列表转换为int(/p>>)的C++非托管列表。 除了我没有使用Marshal::FreeHGlobal释放分配的内存之外,这个函数还有什么问题吗?例如,我应该为数组长度字节分配((count*4)+4) static int* ListToArray(List<int>^ list){ // new array

我正在为C++/CLI函数创建一个.NET包装器类。函数内部使用一个int数组(
int*
),但我想在.NET端公开一个干净的
List^
。我使用下面的代码将C++列表转换为int(/p>>)的C++非托管列表。 除了我没有使用
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;
}
static int*ListToArray(List^List){
//新阵列
int count=列表->计数;
int*arr=(int*)(Marshal::AllocHGlobal(count*4.ToPointer());
//将列表转换为数组
对于(int a=0;a
您的代码是正确的。您分配了正确的内存量。我不使用
4
而是使用
sizeof int
,它更具表现力

我真想知道你为什么要使用
AllocHGlobal
。我认为<代码>新< /代码>在C++代码中更合适。我还想知道你为什么使用原始指针。<代码> STD::向量<代码>在C++代码中更具意义?