对于 TabCtrl_InsertItem
, 我们需要保留 pszText
member 指向有效内存还是操作系统会复制文本以便我们可以立即清除文本?
TCITEM tcItem = { TCIF_TEXT };
CString strText;
for (int i=0; i<3; i++) {
strText.Format(_T("Tab %d"), i+1);
tcItem.pszText = strText; // option 1
tcItem.pszText = _tcsdup(strText); // option 2
TabCtrl_InsertItem(i, &tcItem);
}
我们如何才能知道对于这个函数和 future 的其他函数哪个是正确的? 我在 MSDN 中找不到它。
最佳答案
操作系统会将字符串复制到内部数据结构中。您不需要维护支持字符数组。您可以在函数调用完成后立即释放它。
通常,任何接收字符串的 Windows API 函数都是这种情况。没错,MSDN 文档中没有明确说明,但大多数 Windows 开发人员已经知道这一点。当这不为真时,MSDN 将明确指出。我想不出一个例子 - 如果它曾经发生过,那也是非常罕见的。
关于c++ - TabCtrl_InsertItem : do we need to keep memory of the text alive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23755733/