while (1): study();

구조체에 대한 new & delete 연산 본문

학습/C, C++

구조체에 대한 new & delete 연산

전국민실업화 2021. 12. 19. 00:44
728x90
typedef struct __Point
{
	int xpos;
	int ypos;
} Point;
위의 구조체를 기반으로 두 점의 합을 계산하는 함수를 다음의 형태로 정의하고
Point& PntAdder(const Point& p1, const Point& p2);
임의의 두 점을 선언하여, 위 함수를 이용한 덧셈연산을 진행하는 main함수를 정의해보자. 단, 구조체 Point 관련 변수의 선언은 무조건 new연산자를 이용해서 진행해야 하며, 할당된 메모리 공간의 소멸도 철저해야 한다.

 

#include <iostream>

using std::cin;
using std::cout;
using std::endl;

typedef struct __Point
{
	int xpos;
	int ypos;
} Point;

Point& PntAdder(const Point& p1, const Point& p2);

int main(void)
{

	Point* pp1 = new Point;
	Point* pp2 = new Point;

	cout << "첫 번째 좌표를 입력하세요." << endl;
	cin >> pp1 -> xpos >> pp1 -> ypos;
	cout << "두 번째 좌표를 입력하세요." << endl;
	cin >> pp2 -> xpos >> pp2 -> ypos;

	Point& res = PntAdder(*pp1, *pp2);

	delete pp1;
	delete pp2;

	cout << "[ 결 과 ]" << endl;
	cout << res.xpos << ' ' << res.ypos << endl;

	delete &res;

	return 0;
}

Point& PntAdder(const Point& p1, const Point& p2)
{
    /* 지역변수는 사라지지만 할당된 공간은 남아있으므로
    반환값 참조자의 주소 연산을 통해 해제해줘야함. */
	Point* pres = new Point;

	pres -> xpos = p1.xpos + p2.xpos;
	pres -> ypos = p1.ypos + p2.ypos;

	return *pres;
}
728x90
Comments