ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] Delete
    프로그래밍/C & C++ 2024. 7. 7. 10:05
    728x90
    반응형

    delete 키워드는 C++에서 여러 용도로 사용되며, 특히 메모리 관리와 함수 오버로드 삭제에 중요한 역할을 합니다. 아래에 delete 키워드의 사용법과 관련된 기능들을 정리하여 설명합니다.

    1. 동적 메모리 해제

    단일 객체 삭제

    • new 연산자로 할당된 동적 메모리를 해제할 때 사용합니다.
      int* p = new int(10);
      delete p;

    배열 삭제

    • new[] 연산자로 할당된 동적 배열을 해제할 때 사용합니다.
      int* arr = new int[10];
      delete[] arr;

    2. 삭제된 함수 (Deleted Functions)

    C++11부터 도입된 기능으로, 특정 함수나 메서드 오버로드를 금지하여 잘못된 호출을 컴파일 타임에 방지할 수 있습니다.

    함수 오버로드 삭제

    • 특정 타입의 인자를 받는 함수나 생성자를 금지할 수 있습니다.

      class MyClass {
      public:
        MyClass(int) = delete;      // int형 인자를 받는 생성자 삭제
        MyClass(double d) {}        // double형 인자를 받는 생성자
      
        void func(int) = delete;    // int형 인자를 받는 함수 삭제
        void func(double d) {}      // double형 인자를 받는 함수
      };

    복사 생성자와 복사 대입 연산자 삭제

    • 객체의 복사를 금지하여 불변 객체를 만들거나 특정 동작을 방지할 수 있습니다.
      class NonCopyable {
      public:
        NonCopyable() = default;
        NonCopyable(const NonCopyable&) = delete;            // 복사 생성자 삭제
        NonCopyable& operator=(const NonCopyable&) = delete; // 복사 대입 연산자 삭제
      };

    3. 스마트 포인터와 결합된 delete

    현대 C++에서는 스마트 포인터를 통해 수동으로 delete를 호출할 필요 없이 자동으로 메모리를 관리할 수 있습니다.

    std::unique_ptr

    • 소유권이 하나뿐인 동적 메모리를 관리합니다.
      std::unique_ptr<int> ptr = std::make_unique<int>(10);

    std::shared_ptr

    • 여러 소유자가 참조할 수 있는 동적 메모리를 관리하며, 참조 카운트를 통해 메모리를 해제합니다.
      std::shared_ptr<int> ptr1 = std::make_shared<int>(10);
      std::shared_ptr<int> ptr2 = ptr1; // 참조 카운트 증가

    4. 특정 상황에서의 삭제 (SFINAE와 결합)

    C++ 템플릿 메타프로그래밍에서 특정 조건에서만 함수 오버로드를 삭제하는 데 사용할 수 있습니다.

    template <typename T>
    void func(T) = delete;           // 모든 타입에 대해 삭제
    
    void func(int) {}                // int 타입에 대해서만 허용

    결론

    • 메모리 해제: deletedelete[]를 사용하여 동적으로 할당된 메모리를 해제합니다.
    • 함수 삭제: = delete를 사용하여 특정 함수나 메서드 오버로드를 삭제하여 잘못된 호출을 방지합니다.
    • 복사 금지: 복사 생성자와 복사 대입 연산자를 삭제하여 객체의 복사를 금지할 수 있습니다.
    • 스마트 포인터: std::unique_ptrstd::shared_ptr를 사용하여 자동으로 메모리를 관리합니다.
    • 특정 조건에서의 삭제: 템플릿 메타프로그래밍과 결합하여 특정 조건에서만 함수 오버로드를 삭제할 수 있습니다.

    이러한 기능들은 C++의 메모리 관리와 함수 오버로드 제어를 더 명확하고 안전하게 만들어줍니다.

    728x90
    반응형

    '프로그래밍 > C & C++' 카테고리의 다른 글

    [C++] 댕글링 포인터 (Dangling Pointer)  (0) 2024.07.07
    [C++] 클래스 생성자 맴버 초기화  (0) 2024.07.07
    [C++] Mutable  (0) 2024.07.07
    [C++] Auto  (0) 2024.07.07
    [C++] 상수형 메서드  (0) 2024.07.06
Designed by Tistory.