我的一个同事写了下面的代码,我相信这是错误的。
我想向他解释问题,但不知道正确的术语,因此无法找到支持我的立场的参考资料:
他的代码:
BSTR someString = _bstr_t(L"Hello World");
为什么我认为这是错误的:
我认为_bstr_t(L"Hello World");
调用了_bstr_t
的构造函数,并创建了一个短暂的临时变量。该临时变量将在此代码行之后(分号序列点之后)立即被自动删除,其字符串空间被释放。这将导致someString
指向已被释放的内存。
问题:
那个构造函数的正确术语是什么?
你能指出一些详细描述使用的参考资料/术语/页面吗?
是否有一个临时的_bstr_t
对象术语?
我想我会称其为“匿名临时变量”,但我不知道这是否在技术上准确。
(或者也许我的分析完全错误....如果是这样,我很想知道)
澄清:
_bstr_t是C++类,通常由Microsoft用于包装他们的BSTR类型,因此它具有构造函数/析构函数/运算符等。
BSTR
是一个WCHAR*
的typedef,因此它没有任何逻辑。它只是一个愚笨的指针。
{
一直到右大括号}
。但是这里没有括号……那么到底是什么定义了临时_bstr_t
的“作用域”呢? - abelenkyconst _bstr_t& someString = "Hello, World"
相反,它调用了复制构造函数,并且其范围由括号限定。 - Alexandre C.