※ std::shared_ptr 요약
C++11에 새로 추가된 스마트 포인터인 shared_ptr에 대한 내용이다.

스마트 포인터란, 사용하지 않는 메모리나 사용이 끝난 메모리를 자동으로 해제/관리 해주는 것을 의미하는 것으로써 JavaC#의 가비지 컬렉터와 비교 했을때 성능의 손해는 거의 없으면서 메모리 관리의 이점을 얻을 수 있으므로 편하고도 안전하다.

스마트 포인터는 메모리 누수 관리에 자신이 없는 초보자들이나 복잡하고 거대한 프로젝트를 진행할때 사용하면 적당할 거 같다.

그렇지만 필자는 스마트 포인터를 거의 사용하지 않는다. 아직은 직접 할당, 해제를 해줘야 안심?이 되기 때문이다.


※ std::shared_ptr 특징
- 레퍼런스(참조) 카운팅을 지원한다.
- 명시적인 delete를 해주지 않아도 마지막에 참조하는 곳에서 스코프를 벋어날때 자동으로 해제된다.
- 특별히 어려운 문법을 배우지 않고도 메모리 관리에 큰 편의를 제공받는다.

※ std::shared_ptr을 사용해야 하는 경우

- 메모리 관리에 자신없는 분들이 메모리를 관리해야 할 때

- 거대하고 복잡한 프로젝트를 진행 할 때

- C++11이나 그 이상을 지원하는 컴파일러를 사용 할 때


 

※ std::tuple 요약
TR1부터 새롭게 추가된 std::tuple은 C++98에서 기본 제공하던 std::pair의 확장 버전으로써,
컴파일 시간에 명시되거나 추론될 수 있는 데이터형 요소들을 가지는 이종 목록(heterogeneous list)이다.
TR1인 Visual Studio 2010에서는 10개의 요소를 저장할 수 있고 
C++11을 부분 지원하는 Visual Studio 2013부터는 저장 가능한 항목 개수에 제한이 없고 
각각의 항목마다 개별 타입으로 지정 가능하다.

※ std::tuple 특징
std::tuple은 주로, 함수에서 2개 이상의 값을 반환해야할 때 사용한다.
기존에는 구조체를 이용하여 2개 이상의 값을 리턴했지만, 단순히 2개 이상의 값을 반환하기 위해
구조체를 만드는 것은 귀찮을 때도 있고 배보다 배꼽이 더 커지는 일이다.

필요한 헤더 파일
#include <tuple>

※예제
#include <iostream>
#include <string>
#include <tuple>

using namespace std;

enum { GET_STATE=0, GET_DESCRIPTION };

std::tuple<bool, string> CheckPowerOfTwo( const int nNum );

int main( )
{
     std::tuple<bool, string> tupleTest = CheckPowerOfTwo( 8 );
    
     //결과에 따른 문구 출력
     cout<<std::get<GET_DESCRIPTION>(tupleTest)<<endl;
    
     if( std::get<GET_STATE>(tupleTest) == true )
     {
          //2의 n승이 맞다면 추가 작업
     }
     else
     {
          //2의 n승이 아니라면 작업하지 않음
     }

     return 0;
}

std::tuple<bool, string> CheckPowerOfTwo( const int nNum )
{
    int nResult = nNum & (nNum-1);

    if( nResult == 0 )
    {
        return std::make_tuple( true, "2의 n승이 맞음" );
    }
    else
    {
        return std::make_tuple( false, "2의 n승이 아님" );
    }
}


※결과

마땅히 할 예제가 없어서 아무거나 한거니.. 대충 이런식으로 쓰는 것만 보면 되고,

문법은 다음 게시물부터 다루도록 하겠음.




+ Recent posts