我是否必须,以及如何从已返回到托管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;
我是新的释放内存,并没有弄清楚如何以及何时释放它。 任何人?
答案 0 :(得分:2)
当值struct 被分配给另一个变量时,其成员被复制,因此两个变量都有自己的数据副本(参见Value classes and structs (C++/CX) )。从函数返回值结构时适用相同的规则。
在您的代码中,您拥有playerdata
,类型为PlayerData
且具有自动存储持续时间的对象。 return
语句复制playerdata
(包括Platform::String^
成员),并将此副本返回给调用者。之后,playerdata
超出范围,并自动销毁。
换句话说:您发布的代码按预期工作。您不必明确释放任何内存。
答案 1 :(得分:1)
在堆栈上创建了playerdata结构; '新'没被叫。它不是在堆上创建的,因此没有需要释放的内存。