为什么没有展示 new
expression和 delete
expression实现为语言内置而不是常规函数?
如果我们有...
向操作系统请求/归还内存的一种方式
一种显式调用构造函数的方式(placement
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 */
}
最佳答案
如果用户的目标是在某个内存位置创建一个对象,那么 new
似乎是一种自然的方法,因为 转发引用、可变参数模板 和 placement new 在那个时候已经不是什么东西了。正如 @T.C. 正确指出的那样模板于 1990 年发布,并于 1989 年发布。另一方面,可变参数模板仅在 C++11 中成为 C++ 的一部分。
tl;dr 没有办法将一堆参数转发给任意类型的构造函数(就像现在使用 make
函数一样)。
关于c++ - 为什么语言中内置了非放置 `new` 和 `delete` 而不仅仅是常规函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44969892/