4

我是否必须以及如何从已返回到托管 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;

我是释放内存的新手,不知道如何以及何时释放它。任何人?

4

2 回答 2

3

当一个值结构被分配给另一个变量时,它的成员被复制,因此两个变量都有自己的数据副本(请参阅值类和结构 (C++/CX))。当从函数返回值结构时,同样的规则适用。

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

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

于 2016-03-20T15:50:40.907 回答
1

playerdata 结构体是在栈上创建的;没有调用“新”。它不是在堆上创建的,因此没有需要释放的内存。

于 2016-03-10T19:09:36.107 回答