Ответ 1
Он гарантирует, что вызывается оператор заданного назначения, а не любая перегрузка, добавленная в глобальное пространство имен по коду пользователя с подписью void* operator new(std::size_t, _T1*)
.
stl_construct.h
имеет следующую функцию:
template<typename _T1, typename _T2>
inline void
_Construct(_T1* __p, const _T2& __value)
{
::new(static_cast<void*>(__p)) _T1(__value);
}
Я хочу знать, почему нужно использовать __p
to void*
, есть ли какие-либо преимущества?
Он гарантирует, что вызывается оператор заданного назначения, а не любая перегрузка, добавленная в глобальное пространство имен по коду пользователя с подписью void* operator new(std::size_t, _T1*)
.
Это гарантирует, что оператор-оператор потенциально _T1 * не будет выполняться без единого исполнения
Он гарантирует, что любой void* operator new(size_t, _T1*);
не мешает новому месту размещения, которое он пытается сделать.