본문 바로가기
C++

문제 02-3 [구조체에 대한 new & delete 연산]

by KWONE 2024. 8. 1.
#include <iostream>
using namespace std;

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

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

Point& PntAdder(const Point& p1, const Point& p2)
{
	Point* tp = new Point;
	tp->xpos = p1.xpos + p2.xpos;
	tp->ypos = p1.ypos + p2.ypos;
	
	return *tp;
}

int main()
{
	
	Point p1 = { 1,2 };
	Point p2 = { 2,3 };
	Point &np=PntAdder(p1,p2);
	cout<<"("<<np.xpos <<","<< np.ypos<<")" << endl;
	delete &np;
}
  • 함수 내에 선언된 변수를 참조형으로 반환하려면 해당 변수는 어떻게 선언해야 하는가?
    • 지역변수를 그대로 반환하면 함수 종료와 동시에 소멸하기 때문에 남아있도록 하는 동적할당을 통해 선언해야함.
  • 동적할당 한 변수를 함수의 참조형 매개 변수의 인자로 어떻게 전달해야 하는가?
    • 해당 동적할당한 변수의 포인터를 함수의 인자로 전달해야한다. 

 

#include <iostream>
using namespace std;

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

Point PntAdder(const Point p1, const Point p2)
{
	Point tp;
	tp.xpos = p1.xpos + p2.xpos;
	tp.ypos = p1.ypos + p2.ypos;
	
	return tp;
}

int main()
{
	
	Point p1 = { 1,2 };
	Point p2 = { 2,3 };
	Point np=PntAdder(p1,p2);
	cout<<"("<<np.xpos <<","<< np.ypos<<")" << endl;
	
}

 

**참고사항**

다르게 사용하는 이유 (참조형으로 반환하는 이유)

단순한 복사가 아니라 참조(call-by-reference)를 통해 나중에 값이 큰값을 복사하는대신에 참조를 통해 전달하므로 성능 향상에 도움이 된다. 또한 추후 상속을 사용할때 포인터로 반환하면 파생이 유리하다.그리고 단순하게 함수가 끝난후에도 동적할당으로 생성된 객체는 해제 전까지 소멸되지않는다.