본문 바로가기
프로그래밍/C++

객체 포인터 배열

by 리뷰하는 (게임)프로그래머_리프TV 2010. 3. 21.



말이 어렵다.
객체...
포인터...
배열...
따로 봐도 어렵고

같이 봐도 어렵다 ㅎ

흔히 클래스를 만들고
main에 선언을 해주면 보통 객체화,
라고들 하는데
거기에 포인터가 붙고, 배열까지 따라 오니
손에 잡힐 듯 하면서도 흘러 내리는 느낌

하나씩 천천히 따라가 보자.

#include <iostream>
#include <string.h>

class AAA
{
	int n;
public:
	AAA(int _n)
	{
		n = _n;
		std::cout << n << std::endl;
	}
};

void main()
{
	AAA* aaa[2];	// 객체 포인터 배열 선언

	// 이런 식으로 사용하기 위함
	aaa[0] = new AAA(10);
	aaa[1] = new AAA(20);

	// 마지막에 delete
	delete aaa[0];
	delete aaa[1];
}



막상 보니 별거 아니다.

기존의 포인터에 대해서 이해를 확실하게 했다면

이해 자체는 크게 어렵지 않다.

예제 코드에서는 생성자에 인자값을 받게 해 두었지만

꼭 저런식으로 선언을 해야만 하는것은 아니다.

#include <iostream>
#include <string.h>

int cnt = 0;

class AAA
{
	int n;
public:
	AAA()
	{
		n = 0;
		std::cout << "AAA() 호출 됨" << std::endl;
		cnt++;
	}
	AAA(int _n)
	{
		n = _n;
		std::cout << "AAA(int _n) 호출 됨" << std::endl;
		cnt++;
	}
};

void main()
{
	AAA** aaa;	// 2차원 포인터를 사용해서 응용이 가능

	aaa = new AAA*[2];	// 좀전에 객체 포인터 배열을 생성한 것.

	// 사용법은 마찬가지
	aaa[0] = new AAA[2];
	aaa[1] = new AAA(20);

	std::cout << "총 생성된 객체의 갯수 : " << cnt << std::endl;

	delete [] aaa[0];
	delete aaa[1];

	// 마지막에 한번더 지워주면 된다.
	delete [] aaa;
}

 

구지 소스코드만 봐도 어떤식으로 돌아 갈것 같은지 이해 하겠지만,
결과값을 보면 확실해 질듯,
왜 이런 결과가 나오는지만 알아도,
객체 포인터 배열에 대해선 걱정하지 않아도 될듯.
내 생각엔 자주 사용하게 될것 같다는 느낌이 직감적으로 꼳히는데,
나만의 착각은 아닐것 같다.

'프로그래밍 > C++' 카테고리의 다른 글

friend  (0) 2010.03.21
this 포인터  (0) 2010.03.21
클래스의 활용  (0) 2010.03.20
class(클래스) ~ C++의 꽃 ~  (0) 2010.03.19
레퍼런스(Reference)  (0) 2010.03.18