【发布时间】:2018-03-08 06:52:07
【问题描述】:
请多多包涵,我做 C++ 程序员已经有一段时间了。
我需要知道我是否做错了。它有效,但我怀疑它会导致内存泄漏。我有这个功能:
_bstr_t WCH2BSTR(wchar_t* st)
{
BSTR stres = SysAllocString(st);
return (_bstr_t)stres;
}
假设我要使用这样的结果:
wcout << WCH2BSTR(wCharArr) << " done." << endl;
这会导致内存泄漏,或者 BSTR 会被 Java 中的“垃圾收集器”删除吗?
如果是内存泄漏,我怎样才能在不失去作为单线的能力的情况下防止它?有时 WCH2BSTR 的结果存储在 BSTR 变量中并正确处理,但我想使用相同的函数以单行方式将 wchar_t 连接到 BSTR。
谢谢。
【问题讨论】:
-
C++ 中没有自动垃圾回收。
-
SysFreeString是使用SysAllocString的必要条件,否则你是对的,你确实会泄漏内存。 -
首先,由于这个问题是特定于 windows 的,而不是标准的 C++,所以您可能希望将问题标记为 windows 或 microsoft(而不是 C++),以增加获得有用回复的机会。二、看MSDN,具体是docs.microsoft.com/en-us/cpp/atl-mfc-shared/…
-
@codekaizer:C++ 中有 自动垃圾收集。它与 Java 或 .NET 的垃圾收集不同之处在于它是确定性的。请记住,在 C++ 中,“自动存储持续时间” 被称为 “自动” 是有原因的。