什么::新意味着什么?

Lyc*_*ess 6 c++ scope-resolution new-operator

检查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;
}
Run Code Online (Sandbox Code Playgroud)

这可以在我的DXSDK版本(2010年6月)第428行的DXUTmisc.h中找到.我想知道那个::新事物....我正在尝试谷歌搜索堆栈溢出但似乎搜索引擎在我在搜索栏中输入":: new"时丢弃了两个冒号... .

tem*_*def 15

::new呼叫意味着程序正试图利用全球new运营商分配空间,而不是使用任何new这是在类或命名空间范围内定义操作.特别是,此代码尝试使用称为放置的new东西,其中正在创建的对象放置在内存中的特定位置.通过显式调用回全局范围,该函数确保正确使用placement new,并且不会意外调用在作用域链中某处引入的不同分配函数.

希望这可以帮助!