0

我的应用程序需要管理一些 unicode 字符串 (<10)。这些字符串的内容是动态的,可以通过应用程序运行而改变。为了存储字符串,我使用了 UnicodeString 类型的对象。

解决此问题的一种方法是创建与 unicode 字符串一样多的成员变量,例如:

UnicodeString str1;

UnicodeString str2;

...

UnicodeString strN;

至少乍一看,这个解决方案非常简单。但是可扩展性存在问题。如果将来字符串的数量会增加,我们就有可能创建难以阅读的大代码。所以我想创建这样的东西来管理字符串:

std::map<HWND, UnicodeString> file_names;    ///< member variable of form TForm1

每个字符串都与某个编辑框相连。我可以使用窗口句柄作为字典的键。

我不明白 - 在这种情况下,谁应该负责分配和释放存储 unicode 字符串的空间?假设我在本地堆栈上创建 UnicodeString 变量:

void TForm1::ProcessFile(TEdit *edit_box)
{
    UnicodeString str = "C:\\Temp\\ws.gdb";

    file_name[edit_box->Handle] = str;
}

str变量的内容会在成员函数ProcessFile的末尾保留吗?

4

1 回答 1

1

a 的内存存储UnicodeString由 RTL 为您进行引用计数和管理。您不必担心自己释放它,除非您UnicodeString使用运算符分配它本身new。在您的代码片段中,该str变量将在ProcessFile()退出时被释放,但它的内容将继续存在,因为它file_name仍然具有对其的活动引用。

不要使用 anHWND作为std::map. 由该TWinControl::Handle属性管理的窗口是动态的,并且可以在应用程序的生命周期内更改值。但是,您可以改用TEdit*指针:

std::map<TEdit*, UnicodeString> file_names;

void TForm1::ProcessFile(TEdit *edit_box)
{
    UnicodeString str = "C:\\Temp\\ws.gdb";
    file_names[edit_box] = str;
}
于 2012-06-19T04:34:49.403 回答