使用new时,优点将指针投射到void*

The advantage cast pointer to void* when use new

本文关键字:void 指针 new 使用      更新时间:2023-10-16

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*,有什么好处吗?

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

它确保潜在的 _T1* 强制转换运算符不会被统一执行

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