[英]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.