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; }