728x90
delete
delete는 C++11 이후에 추가된 키워드이다.
동적할당의 delete와는 전혀 상관없다.
delete는 명시적으로 함수를 삭제시키는 함수이다.
함수 삭제하는 방법은 간단하다. 함수 선언 뒤에 = delete; 를 붙이면 된다.
int Multifly(int a, int b) = delete;
사용하는 이유 및 활용
아니 기껏 만들어 둔 함수를 굳이 delete로 삭제시키는 이유가 뭘까?
(사실 그냥 안 씀. 쓰는 걸 못 봄)
일단, 기본적으로 암시적 변환에 의한 의도치 않은 함수 호출을 방지하기 위해서이다.
다음 코드를 보면, 매개변수를 int타입으로 받지만, float타입을 넣어도 C++의 암시적 형 변환에 의해서 함수가 호출된다.
#include <iostream>
int Add(int x, int y) { return x + y; }
int main()
{
int Result = Add(10.0f, 20.0f);
}
이를 delete를 활용하면, 방지할 수 있다.
#include <iostream>
int Add(int x, int y) { return x + y; }
float Add(float x, float y) = delete;
int main()
{
int Result = Add(10.0f, 20.0f);
float Result = Add(10.0f, 20.0f);
}
템플릿에서도 활용이 될 수 있는데, 특정 타입의 사용에 대해서만 막을 수 있다.
#include <iostream>
template<typename T>
T Add(T a, T b) { return a + b; }
char Add(char a, char b) = delete;
int main()
{
int Result = Add(10, 20);
char Result2 = Add('A', 'B'); // 컴파일 에러 발생, char 타입에 대한 Add 함수는 삭제됨
}
또한, delete는 특히, 컴파일러가 자동으로 생성해 주는 특별 함수들을 삭제시키는 데 사용된다.
복사나 대입을 완전히 막아, 단일 인스턴스 유지 보장한다.
#include <iostream>
class Singleton {
public:
static Singleton& instance()
{
static Singleton Instance;
return Instance;
}
// 복사생성자 삭제
Singleton(const Singleton&) = delete;
// 대입 연산자 삭제
Singleton& operator=(const Singleton&) = delete;
private:
Singleton() = default;
};
728x90
'📕Programming > 📝C/C++' 카테고리의 다른 글
| [C / C++] 완벽 전달(Perfect Forwarding)과 std::forward (0) | 2023.12.05 |
|---|---|
| [C / C++] 오른 값 참조(R-Value Reference)와 Move Semantics (0) | 2023.12.04 |
| [C / C++] enum class (0) | 2023.11.29 |
| [C / C++] typedef / using (0) | 2023.11.29 |
| [C / C++] auto (0) | 2023.11.28 |