相关疑难解决方法(0)

279
推荐指数
8
解决办法
19万
查看次数

为什么非放置的`new`和`delete`内置于语言中而不仅仅是常规函数?

为什么非放置new表达式delete表达式实现为内置语言而不是常规函数?

如果我们有...

  • 一种向OS请求/回馈内存的方法

  • 一种显式调用构造函数的方法(放置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 */
} 
Run Code Online (Sandbox Code Playgroud)

c++ new-operator delete-operator

38
推荐指数
2
解决办法
2897
查看次数