공부중

[C++]스마트포인터(Smartpointer) - unique_ptr 본문

Programing/C, C++

[C++]스마트포인터(Smartpointer) - unique_ptr

곤란 2018. 5. 25. 22:03
반응형

코드는 아래와 같다.


#include <iostream>
#include <memory>	//unique_ptr

int main()
{
	int foo = 100;

	//unique_ptr
	std::unique_ptr<int> unique_ptr_value1{ new int };
	//std::unique_ptr<int> unique_ptr_value2{ &foo };	//Runtime Error
								// 동적으로 할당하지 않은 주소를 넣으면 해제시 문제 발생

	*unique_ptr_value1 = 1000;

	std::cout <<"*unique_ptr_value1 : "<< *unique_ptr_value1 << std::endl;		//value
	//std::cout << unique_ptr_value1 << std::endl;		//error
	std::cout <<"unique_ptr_value1.get() : "<< unique_ptr_value1.get() << std::endl;	//address

	/*********************************************
	//
	//std::unique_ptr<int> unique_ptr_value3{ unique_ptr_value1.get() };
	//다른 unique_ptr에 할당(복사) 불가 - 단 하나만 가리킬수 있다
	//
	*********************************************/

	//복사는 안되고 오직 이동만 가능.
	std::unique_ptr<int> unique_ptr_value4{ std::move(unique_ptr_value1) };

	std::cout << "---------- std::move() Call ----------" << std::endl;

	//=====================
	// unique_ptr_value1
	//=====================
	//std::cout << *unique_ptr_value1 << std::endl;		//Runtime error empty
	
	//비어있음 근데 주소 출력은 되네 호오???
	std::cout << "unique_ptr_value1.get() : " << unique_ptr_value1.get() << std::endl;	

	//=====================
	// unique_ptr_value4
	//=====================
	std::cout << "*unique_ptr_value4 : " << *unique_ptr_value4 << std::endl;		//value
	std::cout << "unique_ptr_value4.get() : " << unique_ptr_value4.get() << std::endl;	//address

	return 0;
}



실행 결과



이름 그대로 unique 하다.

복사가 안되고 오직 이동만 가능하다!


그리고 스마트포인터 종류중 하나이므로 메모리 delete해줄 필요 없이 메모리 할당 자동 해제.

반응형