본문 바로가기
개발/C, C++

C++ - 명시적 디폴트 생성자

by 피로물든딸기 2021. 7. 29.
반응형

C, C++ 전체 링크

 

아래와 같이 디폴트 생성자의 정의를 분리할 수 있다.

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

반응형

댓글