3

次のような複数のネイティブ型変数がある場合:

EmpNameC =( wchar_t *)Marshal::StringToHGlobalUni(this->textBox38->Text).ToPointer();
PyrllC =( wchar_t *)Marshal::StringToHGlobalUni(this->textBox31->Text).ToPointer();
DtbrthC=( wchar_t *)Marshal::StringToHGlobalUni(this->textBox37->Text).ToPointer();
PlcBrthC=( wchar_t *)Marshal::StringToHGlobalUni(this->textBox36->Text).ToPointer();
CIDC    =( wchar_t *)Marshal::StringToHGlobalUni(this->textBox35->Text).ToPointer();
ContNoC=( wchar_t *)Marshal::StringToHGlobalUni(this->textBox34->Text).ToPointer();
JndtC   =( wchar_t *)Marshal::StringToHGlobalUni(this->textBox33->Text).ToPointer();
PostnC  =( wchar_t *)Marshal::StringToHGlobalUni(this->textBox32->Text).ToPointer();
DeptC   =( wchar_t *)Marshal::StringToHGlobalUni(this->comboBox4->Text).ToPointer();
AnnLvC  =( wchar_t *)Marshal::StringToHGlobalUni(this->textBox9->Text).ToPointer();
EmrgLvC=( wchar_t *)Marshal::StringToHGlobalUni(this->textBox30->Text).ToPointer();
IrrC=( wchar_t *)Marshal::StringToHGlobalUni(this->comboBox1->SelectedItem->ToString()).ToPointer();
HmTwnC  =( wchar_t *)Marshal::StringToHGlobalUni(this->textBox25->Text).ToPointer();

私はそれらすべてを次のように解放しなければなりません:

Marshal::FreeHGlobal((IntPtr)EmpNameC);      
Marshal::FreeHGlobal((IntPtr)DtbrthC);
Marshal::FreeHGlobal((IntPtr)PlcBrthC);
Marshal::FreeHGlobal((IntPtr)CIDC);
Marshal::FreeHGlobal((IntPtr)ContNoC);
Marshal::FreeHGlobal((IntPtr)JndtC);
Marshal::FreeHGlobal((IntPtr)PostnC);
Marshal::FreeHGlobal((IntPtr)DeptC);
Marshal::FreeHGlobal((IntPtr)AnnLvC);
Marshal::FreeHGlobal((IntPtr)EmrgLvC);
Marshal::FreeHGlobal((IntPtr)IrrC);
Marshal::FreeHGlobal((IntPtr)HmTwnC);

1つのオブジェクトごとに1回実行する代わりに、すべてのネイティブオブジェクトを解放するために使用できるより短い方法はありますか?

4

1 に答える 1

2

キューを保持する専用の構造で管理できます。

ネイティブ オブジェクトを割り当てるたびに、それをキューにプッシュし、最後にそれらをすべてループで解放します。

于 2012-12-10T09:36:05.830 に答える