类构造,但现在分配内存 模板 内嵌式空心结构就地(_T1*_Ptr) { 新的(静态_cast(_Ptr))_T1(); } 我知道C++的新地方,我不懂上面的语法!

类构造,但现在分配内存 模板 内嵌式空心结构就地(_T1*_Ptr) { 新的(静态_cast(_Ptr))_T1(); } 我知道C++的新地方,我不懂上面的语法!,c++,C++,此语法称为。它允许您在已经拥有的内存位置中构造对象。它不会为您分配内存 在这种情况下,T1对象被构造在由_Ptr指向的内存位置中,因为new期望void*,所以它被向下丢弃。无论如何,强制转换都会隐式进行,看起来显式强制转换是为了明确意图。哦,我已经发现了新的操作符(inline void*operator new(std::size\t,void*\u p)throw(){return\u\p;}),但是为什么需要void*?当一个内存位置只是一个内存位置并且没有关于它包含什么的语义时,它通常

此语法称为。它允许您在已经拥有的内存位置中构造对象。它不会为您分配内存


在这种情况下,
T1
对象被构造在由_Ptr指向的内存位置中,因为
new
期望
void*
,所以它被向下丢弃。无论如何,强制转换都会隐式进行,看起来显式强制转换是为了明确意图。

哦,我已经发现了新的操作符(inline void*operator new(std::size\t,void*\u p)throw(){return\u\p;}),但是为什么需要void*?当一个内存位置只是一个内存位置并且没有关于它包含什么的语义时,它通常表示为
void*
,因为它可以包含任何内容,也不包含任何内容。可以将类型化指针分配给void*指针,而无需使用类型转换,例如:
new(_Ptr)_T1()无论如何,它都会被隐式地丢弃。也许这只是为了表明意图。
template <class _T1>
inline void constructInPlace(_T1 *_Ptr)
{
    new (static_cast<void*>(_Ptr)) _T1();
}