template <class _T1>
inline void constructInPlace(_T1 *_Ptr)
{
new (static_cast<void*>(_Ptr)) _T1();
}
我知道c++的新地方,我看不懂上面的语法!
template <class _T1>
inline void constructInPlace(_T1 *_Ptr)
{
new (static_cast<void*>(_Ptr)) _T1();
}
我知道c++的新地方,我看不懂上面的语法!
这种语法称为placement new。它允许您在您已经拥有的内存位置中构造对象。它不会为您分配内存。
在这种情况下,T1
在 _Ptr 指向的内存位置中构造了一个对象,因为new
expects void*
,它被丢弃了。无论如何,强制转换都会隐式发生,看起来显式强制转换是为了明确意图。