Namespaces
Variants

Standard library header <new>

From cppreference.net
Standard library headers

이 헤더는 dynamic memory management 라이브러리의 일부이며, 특히 low level memory management 기능을 제공합니다.

목차

클래스

메모리 할당이 실패할 때 발생하는 예외
(클래스)
잘못된 길이의 배열 할당 시 발생하는 예외
(클래스)
정렬 인식 할당 및 해제 함수에 정렬을 전달하는 데 사용되는 타입
(열거형)

타입

new 핸들러의 함수 포인터 타입
(타입 정의)

태그

비예외 발생 할당 함수 를 선택하는 데 사용되는 태그
(태그)
operator delete 의 소멸 삭제 오버로드를 선택하는 데 사용되는 태그
(태그)

상수

가짜 공유를 피하기 위한 최소 오프셋
진짜 공유를 촉진하기 위한 최대 오프셋
(상수)

함수

할당 함수
(함수)
해제 함수
(함수)
현재 new 핸들러를 얻음
(함수)
new 핸들러를 등록함
(함수)
(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;
  // pointer optimization barrier
  template<class T> constexpr T* launder(T* p) noexcept;
  // hardware interference size
  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
operator delete[](void* ptr, std::align_val_t alignment, const std::nothrow_t&) noexcept;
constexpr void*
operator new(std::size_t size, void* ptr) noexcept;
constexpr void*
operator new[](std::size_t size, void* ptr) noexcept;
void
operator delete(void* ptr, void*) noexcept;
void
operator delete[](void* ptr, void*) noexcept;

클래스 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;
  };
}