목차
C++ 생성자와 소멸자
생성자와 소멸자의 필요성
생성자와 소멸자의 실행 싯점
C++에서의 메모리 관리
생성자와 소멸자의 필요성
생성자와 소멸자의 실행 싯점
C++에서의 메모리 관리
본문내용
부탁드릴 것은 클래스를 만들경우에 우선적으로는 생성자와 소멸자를 만드는 일을 게을리 하지 말것이며 그리고 메모리 설정과 해제는 주로 생성자와 소멸자에서 해주시기를 바랍니다. 생성자에서 설정을 하는 것은 꼭 강요하고 싶지는 않습니다. 그러나 소멸자에서 메모리 해제는 꼭 필요한것입니다.
보통 일반적인 방법은 생성자에서 메모리를 설정하는 것 보다 어떤 초기화 함수를 만들고 이함수를 실행하면서 메모리를 설정하는 경우가 많습니다. 다음은 초기화 함수를 만들고 이곳에서 메모리를 설정한 예입니다.
class CNamecard
{
protected:
char *name;
:
public:
CNamecard();
~CNamecard();
int InitName(int size);
};
CNamecard::CNamecard()
{
name=NULL;
}
CNamecard::~CNamecard()
{
if(name!=NULL)
delete name;
}
int CNamecard::InitName(int size);
{
name= new char[size];
if(name==NULL)
return 0;
return 1;
}
void main()
{
CNamecard *p=new CNamecard;
p->InitName(80);//name에 80크기의 메모리를 할당한다.
delete p;
}
위의 예에서 보면 생성자에서는 name에 NULL이라는 값만 설정되었습니다. 그리고 메모리 필요에 따라서 InitName함수에서 설정한 값만큼 name에 메모리가 할당됩니다. 이렇게 프로그램 중간에 필요에 의해서 맴버 변수에 메모리를 할당한다 하여도 소멸자에서는 이것을 확인하고 메모리가 할당되었는가를 확인하여 할당되었으면 해제해주는 것이 필요합니다.
소멸자 ~CNamecard()함수에서 if(name!=NULL) 이라는 문장에서 중간에 InitName함수에 의해서 메모리가 할당되었는지 아닌지를 확인할 수가 있습니다. 그이유는 생성자에서 name에 NULL를 할당하였고 InitName가 수행되지 않는한 name는 NULL이기 때문입니다. 이문장은 if(name) 로 바꾸셔도 같은 의미가 됩니다. 이 조건문을 이용하여 name에 메모리가 할당되었다면 바로 메모리를 해제하여 줍니다. 이와 같이 소멸자에 메모리를 해제하는 루틴은 C++에서 class를 사용하는 기본적인 방법입니다.
보통 일반적인 방법은 생성자에서 메모리를 설정하는 것 보다 어떤 초기화 함수를 만들고 이함수를 실행하면서 메모리를 설정하는 경우가 많습니다. 다음은 초기화 함수를 만들고 이곳에서 메모리를 설정한 예입니다.
class CNamecard
{
protected:
char *name;
:
public:
CNamecard();
~CNamecard();
int InitName(int size);
};
CNamecard::CNamecard()
{
name=NULL;
}
CNamecard::~CNamecard()
{
if(name!=NULL)
delete name;
}
int CNamecard::InitName(int size);
{
name= new char[size];
if(name==NULL)
return 0;
return 1;
}
void main()
{
CNamecard *p=new CNamecard;
p->InitName(80);//name에 80크기의 메모리를 할당한다.
delete p;
}
위의 예에서 보면 생성자에서는 name에 NULL이라는 값만 설정되었습니다. 그리고 메모리 필요에 따라서 InitName함수에서 설정한 값만큼 name에 메모리가 할당됩니다. 이렇게 프로그램 중간에 필요에 의해서 맴버 변수에 메모리를 할당한다 하여도 소멸자에서는 이것을 확인하고 메모리가 할당되었는가를 확인하여 할당되었으면 해제해주는 것이 필요합니다.
소멸자 ~CNamecard()함수에서 if(name!=NULL) 이라는 문장에서 중간에 InitName함수에 의해서 메모리가 할당되었는지 아닌지를 확인할 수가 있습니다. 그이유는 생성자에서 name에 NULL를 할당하였고 InitName가 수행되지 않는한 name는 NULL이기 때문입니다. 이문장은 if(name) 로 바꾸셔도 같은 의미가 됩니다. 이 조건문을 이용하여 name에 메모리가 할당되었다면 바로 메모리를 해제하여 줍니다. 이와 같이 소멸자에 메모리를 해제하는 루틴은 C++에서 class를 사용하는 기본적인 방법입니다.
소개글