如何释放 C++ WinRT 值结构的内存
How to free memory of c++ WinRT value structs
我是否必须以及如何从已返回到托管 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;
我是释放内存的新手,不知道如何以及何时释放它。
任何人?
playerdata 结构在堆栈上创建; 'new' 未被调用。它不是在堆上创建的,因此没有需要释放的内存。
当一个 value struct 被分配给另一个变量时,它的成员被 copied,这样两个变量都有自己的副本数据(参见 Value classes and structs (C++/CX))。当从函数返回值结构时,同样的规则适用。
在您的代码中,您有 playerdata
,一个 PlayerData
类型的对象,具有自动存储期限。 return
语句复制了 playerdata
(包括 Platform::String^
成员),并将此副本 returns 复制给调用者。之后,playerdata
超出范围,自动销毁。
换句话说:您发布的代码按预期工作。您不必显式释放任何内存。
我是否必须以及如何从已返回到托管 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;
我是释放内存的新手,不知道如何以及何时释放它。 任何人?
playerdata 结构在堆栈上创建; 'new' 未被调用。它不是在堆上创建的,因此没有需要释放的内存。
当一个 value struct 被分配给另一个变量时,它的成员被 copied,这样两个变量都有自己的副本数据(参见 Value classes and structs (C++/CX))。当从函数返回值结构时,同样的规则适用。
在您的代码中,您有 playerdata
,一个 PlayerData
类型的对象,具有自动存储期限。 return
语句复制了 playerdata
(包括 Platform::String^
成员),并将此副本 returns 复制给调用者。之后,playerdata
超出范围,自动销毁。
换句话说:您发布的代码按预期工作。您不必显式释放任何内存。