2012-06-18 48 views
0

我的應用程序需要管理一些unicode字符串(< 10)。這些字符串的內容是動態的,可以通過應用程序運行來更改。存儲字符串我使用UnicodeString類型的對象。UnicodeString存儲類型

一種方法來解決這個問題是因爲有Unicode字符串例如像創造儘可能多的成員變量:

UnicodeString str1; 

UnicodeString str2; 

... 

UnicodeString strN; 

該解決方案是非常簡單的,至少乍一看。但是可擴展性存在問題。如果將來字符串的數量會增加,那麼我們可能會冒着難以閱讀的bigg代碼的風險。所以我創建吼聲像這樣管理弦:

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; 
} 

海峽變量的內容生存的成員函數ProcessFile結束?

回答

1

UnicodeString的內存存儲由RTL爲您引用計數和管理。除非您使用new運算符分配UnicodeString本身,否則無需擔心自己將其釋放。在你的代碼片段中,當ProcessFile()退出時str變量將被釋放,但其內容將繼續存在,因爲file_name仍然具有對其的引用。

不要使用HWND作爲您的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; 
}