簡體   English   中英

什么::新意味着什么?

[英]What does ::new mean?

檢查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調用意味着程序正在嘗試使用全局new運算符來分配空間,而不是使用在類或命名空間范圍內定義的任何new運算符。 特別是,這段代碼試圖使用一種名為placement new東西,其中正在創建的對象被放置在內存中的特定位置。 通過顯式調用回全局范圍,該函數確保正確使用placement new,並且不會意外調用在作用域鏈中某處引入的不同分配函數。

希望這可以幫助!

:: new確保調用全局的新運算符,即標准新運算符。 注意::在new之前表示全局范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM