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*
,是否有任何优势?
答案 0 :(得分:24)
它保证调用预定义的placement new运算符,而不是由具有签名void* operator new(std::size_t, _T1*)
的用户代码添加到全局名称空间的任何重载。
答案 1 :(得分:3)
确保潜在的_T1 *强制转换操作符不会被单元执行
答案 2 :(得分:2)
确保任何void* operator new(size_t, _T1*);
都不会妨碍它正在尝试的新展示位置。