unique_ptr shard_ptr를 사용하려면 먼저 아래처럼 헤더 파일을 추가해야 합니다.

#include <memory>

 

 

struct TEST

{

        TEST() {}

           ~TEST() {}

};

 

 

1. unique_ptr 동적 배열 사용

std::unique_ptr<TEST[]> pTest( new TEST[2] );

템플릿 부분에 동적 배열임을 알려줘야 합니다.

 

 

2. shard_ptr 동적 배열 사용

std::shared_ptr<TEST> pTest( new TEST[2], std::default_delete<TEST[]>() );

unique_ptr과 조금 다릅니다. 템플릿 부분에는 일반적인 타입을 선언해주면 됩니다. 다만 deleter 부분에 동적 배열임을 선언해줘야 합니다.

 

 

3. unique_ptr 사용 중 할당된 객체의 메모리 해제

std::unique_ptr<TEST> pTest( new TEST );

                    

pTest.reset(nullptr);

 

unique_ptr이 소멸되기 전에 할당된 객체의 메모리를 해제 할 때는 reset을 사용하면 간편합니다.

원래 reset은 다른 객체로 바꿀 때 사용하는 것인데 이런 용도로 사용해도 좋습니다

 

 

 

< 테스트 코드 >

#include <memory>

#include <iostream>

 

 

struct TEST

{

           TEST()

           {

                     std::cout << "TEST 생성자" << std::endl;

           }

 

           ~TEST()

           {

                     std::cout << "TEST 소멸자" << std::endl;

           }

};

 

 

 

int main()

{

           std::cout << "unique_ptr - 동적 배열 사용" << std::endl;

           {

               std::unique_ptr<TEST[]> pTest( new TEST[2] );

           }

           std::cout << std::endl;

 

 

           std::cout << "shared_ptr - 동적 배열 사용" << std::endl;

           {

               std::shared_ptr<TEST> pTest( new TEST[2], std::default_delete<TEST[]>() );

           }

           std::cout << std::endl;

 

 

           std::cout << "unique_ptr - reset 사용" << std::endl;

           {

               std::unique_ptr<TEST> pTest( new TEST );

                    

               std::cout << "unique_ptr - reset 사용 전" << std::endl;

               pTest.reset(nullptr);

               std::cout << "unique_ptr - reset 사용 후" << std::endl;

           }

 

           return 0;

}




 

 

저작자 표시
신고
by 흥배 2012.08.20 09:00
| 1 |

티스토리 툴바