C++11 Default와 Explicit, Delete 키워드란 무엇일까?
07 Apr 2020 | c++ programming effectiveexplicit
C++에서 클래스의 객체를 생성할 때 생성자를 사용해서 형번환을 할 수 있다.
class B{
public:
B() { }
B(A& _a){}
B(int n){}
B(char d){}
};
B = 1; B = ‘a’;
이와같이 호출할 때, 해당 타입을 인자로 가진 생성자가 있는 경우에는 형변환이 이루어지며 대입된다.
이런 대입방법은 의도하지 않은 버그를 낳을 수 있기 때문에 생성자에 explicit 키워드를 지정한다면
명시적인 생성자만 호출할 수 있다.
무조건 new B(1) 로 호출하여 대입 가능하다!
default
default 키워드를 사용하여 명시적으로 default 생성자를 선언할 수 있다.
class B
{
public:
B() = default; // B(){}와 동일하다.
private:
B(const B& b) = default; // 복사생성자도 정의할 필요가 없이 기본을 사용할 수 있다.
}
Delete
이와 반대로 명시적으로 생성자를 사용하고 싶지 않은 경우엔 delete를 사용한다. 또한 암시적 형변환이 일어나는 것도 막을 수 있다.
class B
{
public:
B() {}
~B() {}
B(const B& b) = delete;
void foo(int f) = delete;
}