-
[C++] Delete프로그래밍/C & C++ 2024. 7. 7. 10:05728x90반응형
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 타입에 대해서만 허용
결론
- 메모리 해제:
delete
와delete[]
를 사용하여 동적으로 할당된 메모리를 해제합니다. - 함수 삭제:
= delete
를 사용하여 특정 함수나 메서드 오버로드를 삭제하여 잘못된 호출을 방지합니다. - 복사 금지: 복사 생성자와 복사 대입 연산자를 삭제하여 객체의 복사를 금지할 수 있습니다.
- 스마트 포인터:
std::unique_ptr
와std::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