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タイプのオブジェクトがあります。PlayerDataこのreturnステートメントはplayerdata(メンバーを含むPlatform::String^) のコピーを作成し、このコピーを呼び出し元に返します。その後、playerdata範囲外になり、自動的に破棄されます。

つまり、投稿したコードは期待どおりに機能します。メモリを明示的に解放する必要はありません。

于 2016-03-20T15:50:40.907 に答える