개발/C, C++
C++ - 명시적 디폴트 생성자
피로물든딸기
2021. 7. 29. 09:17
반응형
아래와 같이 디폴트 생성자의 정의를 분리할 수 있다.
#include <stdio.h>
#include <iostream>
using namespace std;
class TEST
{
public:
int value;
TEST(void);
void printValue()
{
cout << value << endl;
}
};
TEST::TEST(void) {
value = 1;
}
int main(void)
{
TEST test;
test.printValue();
return 0;
}

그리고 생성자에 { }로 선언하면 빈 생성자를 정의한다.
class TEST
{
public:
int value;
TEST(void) { }
void printValue()
{
cout << value << endl;
}
};
좀 더 문법적으로 표현하면 아래와 같이 선언한다.
TEST(void) = default; // { } 와 동일
그리고 delete 키워드를 쓰면 디폴트 생성자를 삭제할 수 있다.
TEST(void) = delete;
TEST test1; 은 삭제된 생성자를 참조하려고 하기 때문에 컴파일 에러가 발생한다.
#include <stdio.h>
#include <iostream>
using namespace std;
class TEST
{
public:
int value;
TEST(void) = delete;
TEST(int val1)
:value(val1)
{ }
void printValue()
{
cout << value << endl;
}
};
int main(void)
{
//TEST test1; // compile error
TEST test2 = TEST(1); // 생성자 초기화 리스트는 사용 가능
test2.printValue();
return 0;
}

반응형