참고 :new 및 delete 연산자 | Microsoft Learn)

new 연산자

  • 할당 요청에 대한 메모리가 불충분한 경우, std::bad_alloc예외를 throw || new(std::nothrow) 사용
  • throw되지 않는 operator new 연결의 경우, nullptr 반환
  • 반환 값은 void*
  • 2 가지 범위
    • ::operator new : 전역
    • class-name::operator new : 클래스
  • **기본 제공 형식 개체, 사용자 정의된 operater new 함수를 포함하지 않느 클래스 형식 개체 및 모든 형식 "배열" 할당하는 데 new 연산자 사용하면, 전역 new 함수 호출
  • 클래스 범위의 new 함수는 전역 new함수를 숨기는 정적 멤버 함수.
    • 클래스 new에서 size_t 파라미터를 요구해도, Blanks *SomeBlanks = new Blanks; 같은 방식의 오류 생성 코드가 발생 가능

nothrow를 이용한 검사

  • nullptr을 반환하게 할 수 있어 검사 용이
    #include <iostream>
    #include <new>
    using namespace std;
    #define BIG_NUMBER 10000000000LL
    int main() {
     int *pI = new(nothrow) int[BIG_NUMBER];
     if ( pI == nullptr ) {
        cout << "Insufficient memory" << endl;
        return -1;
     }
    }

delete 연산자

  • 2가지 양식
    • size_t양식은 크기 범주를 빠르게 검색, 파생 클래스 제거에 용이
      void operator delete( void * );
      void operator delete( void *, size_t );
  • 반환 값은 void

'공부 > C++' 카테고리의 다른 글

C++ 저장&링킹  (1) 2025.03.01
C++ 컨테이너 클래스  (0) 2025.03.01
포인터  (0) 2025.02.22
Operator 기본 연산자  (0) 2025.02.21
C++ main()에 대해  (0) 2025.02.19

+ Recent posts

let textNodes = document.querySelectorAll("div.tt_article_useless_p_margin.contents_style > *:not(figure):not(pre)"); textNodes.forEach(function(a) { a.innerHTML = a.innerHTML.replace(/`(.*?)`/g, '$1'); });