프로그래밍 공부
작성일
2023. 5. 10. 22:52
작성자
WDmil
728x90

C++에서는 smart_pointer이라는 기법을 활용하여 더 쉽고 간단하게 동적배열 선언 등 다양한 방법으로 사용이 가능하다.

 

smart_pointer를 사용하면 new를 생성해주어도, 어떠한 함수 내부에서 종료되었을 때, 종료자가 스스로를 delete해주기 때문에, 따로 delete해줄 필요가 없어진다.

 

그럼으로 더 쉽고 간단하게 동적데이터 선언이 가능해진다. 다음은 코드 예시이다.

#include <iostream>

class ptr
{
	int x;
	int y;
public:
	ptr(const int x, const int y) : x(x), y(y) {}
	auto Get_x() -> const int { return x; }
	auto Get_y() -> const int { return y; }
	
	friend ptr& operator* (ptr os) {
		return *os;
	}
};

class Smart_ptr
{
	ptr* ptrxy;
public:
	Smart_ptr(const int x, const int y) { ptrxy = new ptr(x, y); }

	friend std::ostream& operator<< (std::ostream& os, const Smart_ptr& sp) {
		os << '[' << sp.ptrxy->Get_x() << ", " << sp.ptrxy->Get_y() << ']';
		return os;
	}

	~Smart_ptr() { delete ptrxy; }
};

int main()
{
	Smart_ptr ptr1(1, 2);
	Smart_ptr ptr2(3, 4);
	Smart_ptr ptr3(5, 6);

	std::cout << ptr1 << ptr2 << ptr3 << std::endl;

	return 0;
}

위 코드처럼, Smart_ptr을 선언하여, 어떠한 포인터 데이터를 동적으로 쉽게 선언해주고, 만약 main문이 아니라 다른 함수에서 종료되었을 지라도 return되면 자동으로 종료자가 선언되기 때문에 delete를 따로 신경써주지 않아도 된다.

728x90