=================================
=================================
=================================
//기본 상본 AAA 를 만든다
class AAA
{
public:
AAA();
~AAA();
virtual void init();
}
class BBB : public AAA
{
public:
BBB();
~BBB();
void init();
int a;
int b;
}
class CCC : public AAA
{
public:
CCC();
~CCC();
void init();
int a;
}
map<int,AAA*> mTest;
mTest[1] = new BBB();
mTest[2] = new CCC();
//이렇게 되었다고 하자 그러면 해제시 어떻게 될까.
Deletefunc()
{
AAA* p = NULL;
for(map<int,AAA*>::iterator it = m_mTest.begin(); it != m_mTest.end(); it++)
{
p = (*it).second;
SAFE_DELETE(p);
}
}
// 보기와 같이 삭제는 되지만 만약 AAA기본 메모리가 10이라할때 BBB,CCC 모두 변수, 데이터를 추가 하였으므로 메모리 용량이 틀리다 그러므로 메모리가 틀린만큼 메모리 릭이 발생한다.
그러므로
BBB* b = (BBB*)mTest[1];
CCC* c = (CCC*)mTest[2];
이런식으로 지정된 메모리를 해제해주어야 한다 하지만 꼭 그렇게 까지 할 필요는 없다.
기본 AAA 클래스 소멸자에 virtual 을 해주면 간단히 해결된다. 즉 메모리를 찾아 소멸해준다는 것이다.
class AAA
{
public:
AAA();
virtual ~AAA(); //이렇게 해주면 보통 상속상태에서 불러들일때 삭제가능하다.
virtual void init();
}
http://www.gpgstudy.com/forum/viewtopic.php?t=17555
=================================
=================================
=================================
'프로그래밍 관련 > 언어들의 코딩들 C++ JAVA C# 등..' 카테고리의 다른 글
자바 java url connect get, post (0) | 2013.07.17 |
---|---|
[C언어] c, c++ 반복문 for 문 관련 (0) | 2013.07.04 |
메모리 풀 예제1 (0) | 2010.03.26 |
string wstring 문자열 부분 복사 (0) | 2010.01.05 |
10진수 정수 숫자로 변환 함수 (0) | 2009.12.30 |
댓글 영역