Namespaces
Variants

Standard library header <new>

From cppreference.net
Standard library headers

此头文件属于 动态内存管理 库的一部分,特别提供了 底层内存管理 功能。

目录

内存分配失败时抛出的异常
(类)
分配长度无效的数组时抛出的异常
(类)
用于将对齐方式传递给对齐感知分配和释放函数的类型
(枚举)

类型

新处理函数的函数指针类型
(类型定义)

标签

用于选择不抛异常的 分配函数 的标签
(标签)
用于选择 operator delete 的销毁删除重载的标签
(标签)

常量

避免伪共享的最小偏移量
促进真共享的最大偏移量
(常量)

函数

分配函数
(函数)
释放函数
(函数)
获取当前的新处理函数
(函数)
注册新处理函数
(函数)
(C++17)
指针优化屏障
(函数模板)

概要

// 所有独立实现
namespace std {
  // 存储分配错误
  class bad_alloc;
  class bad_array_new_length;
  struct destroying_delete_t
  {
    explicit destroying_delete_t() = default;
  };
  inline constexpr destroying_delete_t destroying_delete{};
  // 全局 operator new 控制
  enum class align_val_t : size_t
  {
  };
  struct nothrow_t
  {
    explicit nothrow_t() = default;
  };
  extern const nothrow_t nothrow;
  using new_handler = void (*)();
  new_handler get_new_handler() noexcept;
  new_handler set_new_handler(new_handler new_p) noexcept;
  // 指针优化屏障
  template<class T> constexpr T* launder(T* p) noexcept;
  // 硬件干扰大小
  inline constexpr size_t hardware_destructive_interference_size =
    /* 实现定义 */;
  inline constexpr size_t hardware_constructive_interference_size =
    /* 实现定义 */;
}
// 存储分配与释放
void*
operator new(std::size_t size);
void*
operator new(std::size_t size, std::align_val_t alignment);
void*
operator new(std::size_t size, const std::nothrow_t&) noexcept;
void*
operator new(std::size_t size,
             std::align_val_t alignment,
             const std::nothrow_t&) noexcept;
void
operator delete(void* ptr) noexcept;
void
operator delete(void* ptr, std::size_t size) noexcept;
void
operator delete(void* ptr, std::align_val_t alignment) noexcept;
void
operator delete(void* ptr, std::size_t size, std::align_val_t alignment) noexcept;
void
operator delete(void* ptr, const std::nothrow_t&) noexcept;
void
operator delete(void* ptr, std::align_val_t alignment, const std::nothrow_t&) noexcept;
void*
operator new[](std::size_t size);
void*
operator new[](std::size_t size, std::align_val_t alignment);
void*
operator new[](std::size_t size, const std::nothrow_t&) noexcept;
void*
operator new[](std::size_t size,
               std::align_val_t alignment,
               const std::nothrow_t&) noexcept;
void
operator delete[](void* ptr) noexcept;
void
operator delete[](void* ptr, std::size_t size) noexcept;
void
operator delete[](void* ptr, std::align_val_t alignment) noexcept;
void
operator delete[](void* ptr, std::size_t size, std::align_val_t alignment) noexcept;
void
operator delete[](void* ptr, const std::nothrow_t&) noexcept;
void
<a href="../memory

std::bad_alloc

namespace std {
  class bad_alloc : public exception
  {
  public:
    // 查看特殊成员函数规范的描述
    constexpr const char* what() const noexcept override;
  };
}

std::bad_array_new_length

namespace std {
  class bad_array_new_length : public bad_alloc
  {
  public:
    // 查看特殊成员函数规范的描述
    constexpr const char* what() const noexcept override;
  };
}