noname02
- 클래스 내에 선언된 const 멤버변수의 초기화는 이니셜라이저를 통해야만 한다.
1234567891011121314151617181920212223242526272829303132333435363738#include using namespace std; class SoSimple{private: int num;public: SoSimple(int n) : num(n) { cout
디폴트 생성자는 객체에 생성자가 단 하나라도 정의되어 있지 않은 경우 컴파일 과정에서 자동으로 생성하며, 만약 하나의 생성자라도 정의된 경우 디폴트 생성자는 자동으로 생기지 않는다.예를 들어서 12345678class AAA{ int aaa;public: AAA (int ABC) : aaa(ABC)..}cs 와 같이 객체가 선언되었다고 하면, 앞으로 AAA객체를 선언해야 하는 경우AAA abc; 와 같은 형태로는 선언이 불가능하다는 뜻이다. 무조건AAA (123); 과 같이 선언을 해야 한다.물론 오버로딩을 통해 디폴트선언자를 따로 명시해주면 가능하다.
소멸자는 어떤 특정한 함수 A 내에서 객체가 생성되고, 그 함수A가 종료됨과 동시에 객체가 사라진다면(본래 함수 내에서 선언된 변수는 함수 종료와 함께 사라진다. 객체도 마찬가지.) 함수가 종료되기 바로 전에 소멸자가 처리되고 함수가 종료된다.평소에는 딱히 쓸 일이 없지만, 만약 객체에서 힙 영역을 사용하게 된다면, 함수가 종료되어도 해당 힙 영역에 생성된 메모리는 제거되지 않을 것이다. 이 때, 소멸자에 delete 함수를 통해서 할당된 메모리를 해제시켜줘야 메모리 효율이 좋으므로 보통 이런 경우에 사용한다. 참고로 힙 영역으로 할당된 유효메모리는 프로그램이 종료되도 사라지지 않는다.따라서 반드시 delete 명령어를 통해 memory leak를 방지해줘야 한다.