如何释放c ++ WinRT值结构的内存

时间:2016-03-03 19:35:54

标签: c# windows-runtime c++-cx winrt-component

我是否必须,以及如何从已返回到托管C#项目的Windows运行时组件中创建的值结构中释放内存?

我宣布了结构

// Custom struct
public value struct PlayerData
{
    Platform::String^ Name;
    int Number;
    double ScoringAverage;
};

auto playerdata = PlayerData();
playerdata.Name = ref new String("Bla");
return playerdata;

我是新的释放内存,并没有弄清楚如何以及何时释放它。 任何人?

2 个答案:

答案 0 :(得分:2)

值struct 被分配给另一个变量时,其成员被复制,因此两个变量都有自己的数据副本(参见Value classes and structs (C++/CX) )。从函数返回值结构时适用相同的规则。

在您的代码中,您拥有playerdata,类型为PlayerData且具有自动存储持续时间的对象。 return语句复制playerdata(包括Platform::String^成员),并将此副本返回给调用者。之后,playerdata超出范围,并自动销毁。

换句话说:您发布的代码按预期工作。您不必明确释放任何内存。

答案 1 :(得分:1)

在堆栈上创建了playerdata结构; '新'没被叫。它不是在堆上创建的,因此没有需要释放的内存。