C++에서 constructor는 다음과 같은 종류가 있습니다.


param ctor / default ctor / copy ctor / conversion ctor


자세한 사항은 여기에서 :  http://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)





1. default ctor를 선언하고, 객체를 default로 생성하는 경우.


class Obj
{
public:
  Obj() {} // default ctor
};

int main()
{
  Obj obj; // default
}


컴파일 에러가 나지 않습니다.




2. 임의의 ctor를 명시하고, 객체를 해당 ctor의 형식으로 생성하는 경우.


class Obj
{
public:
  Obj(int i) {} // param ctor
};

int main()
{
  Obj obj(999); // param declaration
}


컴파일 에러가 나지 않습니다.


"no appropriate default constructor available" 라는 컴파일 에러가 나며, 1번과 다르게 default ctor를 반드시 선언해 줘야 합니다.




3. 임의의 ctor를 명시하고, 객체를 해당 ctor가 호출되도록 선언하는 경우.


class Obj
{
public:
  Obj(int i) {}
};

int main()
{
  Obj obj(5);
}


(당연하지만) 컴파일 에러가 나지 않습니다.



결론


A. 객체를 default로 선언을 하게 되면 default constructor가 호출이 된다.


B. 1번의 경우 클래스에서 아무런 constructor가 없을 경우에는 default constructor마저도 없어도 된다.


C. 1번의 경우 다른 constructor(copy ctr, conversion ctr 등)가 존재하는 경우 default constructor를 반드시 명시해 줘야 한다.