8

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 (June2010) の 428 行目の DXUTmisc.h にあります。私はそれについて疑問に思っています::新しいこと....私はスタックオーバーフローでGoogleと検索しようとしていますが、検索バーに「::new」と入力すると、検索エンジンが2つのコロンを破棄しているようです... .

4

2 に答える 2

18

この呼び出しは、プログラムが、クラスまたは名前空間のスコープで定義された演算子を使用するのではなく::new、グローバル演算子を使用してスペースを割り当てようとしていることを意味します。特に、このコードは、作成中のオブジェクトがメモリ内の特定の場所に配置される配置と呼ばれるものを使用しようとしています。この関数は、グローバルスコープに明示的に呼び戻すことにより、これが新しい配置を正しく使用し、スコープチェーンのどこかに導入された別の割り当て関数を誤って呼び出さないようにします。newnewnew

お役に立てれば!

于 2013-01-03T20:54:03.327 に答える
3

:: newは、グローバルの新しい演算子、つまり標準の新しい演算子が呼び出されることを保証します。注::newの前はグローバルスコープを示します。

于 2013-01-03T20:53:22.410 に答える