使用new时,优势将指针转换为void *

时间:2016-07-05 01:01:55

标签: c++ stl

stl_construct.h具有以下功能:

template<typename _T1, typename _T2>
inline void
_Construct(_T1* __p, const _T2& __value)
{
   ::new(static_cast<void*>(__p)) _T1(__value);
}

我想知道为什么需要将__p投射到void*,是否有任何优势?

3 个答案:

答案 0 :(得分:24)

它保证调用预定义的placement new运算符,而不是由具有签名void* operator new(std::size_t, _T1*)的用户代码添加到全局名称空间的任何重载。

答案 1 :(得分:3)

确保潜在的_T1 *强制转换操作符不会被单元执行

答案 2 :(得分:2)

确保任何void* operator new(size_t, _T1*);都不会妨碍它正在尝试的新展示位置。