数组在函数中分配

时间:2012-10-04 10:01:57

标签: c++-cli

我在函数中分配cli :: array时遇到了问题。

我有这样的对象:

array<double>^ tmsr2;

现在我想在函数中分配它:

void allocate(array<double>^ tmsr2)
{
    tmsr2=gcnew array<double>(100);
}

现在,函数中的tmsr2被很好地分配但是在返回main()时我丢失了指针 这个问题对我很清楚,就像我想要分配简单的数组“double * a”一样;我需要将指针传递给函数,因此“&amp; a”然后一切正常。我只是不知道托管数组的语法。非常感谢。

彼得

2 个答案:

答案 0 :(得分:2)

您可以将数组作为参考传递:

void allocate(array<double>^ &tmsr2)
{
    tmsr2=gcnew array<double>(100);
}

答案 1 :(得分:2)

由于array<double>是托管类型,因此您可以在此处使用托管跟踪引用,而不是普通引用。

void allocate(array<double>^% tmsr2)
{
    tmsr2 = gcnew array<double>(100);
}

这是我的测试应用程序:

public ref class AsAClassField
{
public:
    array<double>^ b;

    AsAClassField()
    {
        allocate(b);
        Debug::WriteLine("b = " + (b != nullptr ? "array" : "null"));
    }
};

int main(array<System::String ^> ^args)
{
    array<double>^ a = nullptr;
    allocate(a);
    Debug::WriteLine("a = " + (a != nullptr ? "array" : "null"));
    AsAClassField^ foo = gcnew AsAClassField();

    return 0;
}

输出:

a = array
b = array

当然,您可以随时切换您的allocate函数以返回新分配的数组,而不是将其作为引用。这将更多地采用托管风格。