본문 바로가기

C++/C, C++, STL

디폴트 생성자(Default constructors)와 생성자에서의 delete 키워드

디폴트 생성자(Default constructors)

객체를 생성할 때 초기값을 명시하지 않았을 때 컴파일러가 자동으로 제공하는 생성자를 디폴트 생성자라고 부릅니다.

class Box
{
public:
	void helloWorld()
	{
		std::cout << "Hello World!" << std::endl;
	}
};

int main()
{
	Box box = Box();
	box.helloWorld();
}
코드 비고
Line 12 Box box = Box() 컴파일러에 의해 inline 기본 생성자가 제공됩니다.

디폴트 생성자는 인자를 사용하지 않기 때문에 필드는 필드 타입에 따른 기본 값(0, 빈 문자열, Null 등)으로 초기화됩니다.

다음은 컴파일러가 제공하는 디폴트 생성자의 예시입니다.

class Box
{
public:
	Box() { }
};

디폴트 생성자는 필드에 가비지 값이 포함되어 오류 발생의 원인이 될 수 있습니다.

다음은 디폴트 생성자에서 필드의 디폴트 값을 지정하는 방법입니다.

class Box
{
public:
	Box(int w = 1, int l = 1, int h = 1): m_width(w), m_length(l), m_height(h) { }
};
코드 비고
Line 4 Box(int w = 1, int l = 1, int h = 1) 디폴트 생성자가 호출될 때의 필드의 디폴트 값을 지정합니다.

생성자에서의 delete 키워드

delete 키워드는 객체의 소멸을 위하 키워드로 사용됩니다.

C++ 11부터는 생성자의 선언 코드에서 delete 키워드 사용을 제공하는데, 이는 컴파일러에게 디폴트 생성자의 자동 생성을 방지하기 위한 목적으로 사용됩니다.

class Box
{
public:
	Box() = delete;
};

int main()
{
	// Error: no have default constructor!
	Box box = Box();
}

정리 및 복습

  • 디폴트 생성자는 컴파일러에 의해서 자동으로 생성됩니다.
  • 디폴트 생성자를 사용자가 정의하려면 함수 오버로딩 또는 디폴트 값을 지정하는 방법이 있습니다.
class Box
{
public:
	// overload default constructor
	Box() { };
    
	// give default values to default constructor
	Box(int w = 1, int l = 1, int h = 1): m_width(w), m_length(l), m_height(h) { };
};
  • C++ 11부터 생성자에 delete 키워드를 사용 할 수 있습니다. 이 키워드는 컴파일러가 디폴트 생성자의 자동 생성을 방지하기 위해 사용합니다.