Почему не было размещения new
выражение и delete
выражение реализовано как встроенный язык вместо обычных функций?
Если у нас есть...
-
способ запроса/возврата памяти в ОС
-
способ явного вызова конструктора (размещение
new
) -
способ явно вызвать деструктор (
~T()
)
... почему нельзя было не размещать new
и delete
только регулярные функции в стандартной библиотеке? Пример:
template <typename T, typename... Ts>
T* library_new(Ts&&... xs)
{
auto* ptr = /* request enough memory for `T` from OS */;
new (ptr) T(std::forward<Ts>(xs)...);
return ptr;
}
template <typename T>
void library_delete(T* ptr)
{
ptr->~T();
/* reclaim memory for `T` from OS */
}