Что означает :: новый?

При рассмотрении примера 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;
}

Это можно найти в DXUTmisc.h в строке 428 моей версии DXSDK (июнь 2010 года). Мне интересно об этом :: новый вещь …. Я пытаюсь Google и поиск по переполнению стека, но, кажется, поисковая система отбрасывает два двоеточия, когда я набираю «:: new» в строке поиска ….

4

Решение

::new вызов означает, что программа пытается использовать глобальный new оператор для выделения места, а не с помощью любого new оператор, который был определен в области класса или пространства имен. В частности, этот код пытается использовать то, что называется размещение new в котором создаваемый объект помещается в определенное место в памяти. Явно вызывая обратно в глобальную область действия, функция гарантирует, что это правильно использует размещение new, и случайно не вызывает другую функцию распределения, введенную где-то в цепочке области действия.

Надеюсь это поможет!

12

Другие решения

:: new гарантирует, что новый оператор в глобальном, то есть стандартный новый оператор, вызывается. Примечание :: перед новым указывает на глобальную область.

3

По вопросам рекламы [email protected]