Notice
Recent Posts
Recent Comments
LuvSea
C++에서의 동적할당 본문
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
C에서의 동적할당은 malloc같은 함수를 통해 하였다. 그렇다면 C++에서도 객체 포인터를 만든다음에 malloc을 통해 동적할당이 가능할까?
다음의 소스를 보자.
컴파일도 이상없이 되고 test()함수도 호출된다.
하지만 자세히 보면 어떤 문제가 있는데, 그것은 생성자와 소멸자가 호출되지 않는다는 것이다. 이것은 프로그래머가 의도한 동작을 수행하지 못할 가능성이 생길 수 있다.
따라서 C++에서는 다음과 같은 동적할당 키워드를 제공한다.
new 라는 키워드를 통해 동적할당을 하고, delete 키워드를 통해 free시킨다.
다음과 같은 코드도 가능하다.
따라서 C++에서는 malloc 보다는 new를 통해 동적할당을 하는 것이 바람직하다.
또한 다음과 같은 방법도 가능하다.
다만 delete를 할때는 배열이란 것을 명시해줘야 한다. 하지 않는다면 하나만 지우게 된다.
다음의 소스를 보자.
#include <iostream.h>
#include <malloc.h>
class TEST
{
public:
char a;
TEST()
{
cout<<"디폴트 생성자"<<endl;
}
TEST(int j)
{
cout<<j<<endl;
}
void test()
{
cout<<"test"<<endl;
}
~TEST()
{
cout<<"소멸자"<<endl;
}
};
int main()
{
TEST *B;
B = (TEST*)malloc(sizeof(TEST));
B->test();
free(B);
return 0;
}
컴파일도 이상없이 되고 test()함수도 호출된다.
하지만 자세히 보면 어떤 문제가 있는데, 그것은 생성자와 소멸자가 호출되지 않는다는 것이다. 이것은 프로그래머가 의도한 동작을 수행하지 못할 가능성이 생길 수 있다.
따라서 C++에서는 다음과 같은 동적할당 키워드를 제공한다.
TEST *A;
A = new TEST();
A->test();
delete A;
new 라는 키워드를 통해 동적할당을 하고, delete 키워드를 통해 free시킨다.
다음과 같은 코드도 가능하다.
int *a = new int;
*a = 1;
cout<<*a<<endl;
delete a;
따라서 C++에서는 malloc 보다는 new를 통해 동적할당을 하는 것이 바람직하다.
또한 다음과 같은 방법도 가능하다.
int *a = new int[3];
a[1] = 5; // 혹은 *(a+1)
cout<<a[1]<<endl;
delete []a;
다만 delete를 할때는 배열이란 것을 명시해줘야 한다. 하지 않는다면 하나만 지우게 된다.
'sTudy' 카테고리의 다른 글
[C언어] 구조체의 메모리 저장방식과 #pragma pack (5) | 2009.08.10 |
---|---|
C++ 연산자 오버로딩 (0) | 2009.08.10 |
임시 객체 (0) | 2009.08.10 |
[펌] 함수 포인터 및 클래스 멤버함수의 함수포인터화 (0) | 2009.08.10 |
함수 const (0) | 2009.08.10 |
Comments