【发布时间】:2012-12-18 07:04:16
【问题描述】:
在检查 MS directX 11 DXUT 示例时,出现以下代码:
template<typename TYPE> HRESULT CGrowableArray <TYPE>::SetSize( int nNewMaxSize )
{
int nOldSize = m_nSize;
if( nOldSize > nNewMaxSize )
{
assert( m_pData );
if( m_pData )
{
// Removing elements. Call dtor.
for( int i = nNewMaxSize; i < nOldSize; ++i )
m_pData[i].~TYPE();
}
}
// Adjust buffer. Note that there's no need to check for error
// since if it happens, nOldSize == nNewMaxSize will be true.)
HRESULT hr = SetSizeInternal( nNewMaxSize );
if( nOldSize < nNewMaxSize )
{
assert( m_pData );
if( m_pData )
{
// Adding elements. Call ctor.
for( int i = nOldSize; i < nNewMaxSize; ++i )
::new ( &m_pData[i] ) TYPE;
}
}
return hr;
}
这可以在我的 DXSDK 版本(2010 年 6 月)的第 428 行的 DXUTmisc.h 中找到。我想知道 ::new 的事情....我正在尝试谷歌并搜索堆栈溢出但似乎搜索引擎在我输入“::new”时丢弃了两个冒号在搜索栏中....
【问题讨论】:
-
::是 scope resolution operator 并且它本身指定了全局范围。它确保从全局范围调用new。
标签: c++ new-operator scope-resolution