// ConsoleApplication1.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
#include "pch.h"
#include <iostream>
#include <tchar.h>
#include <stdio.h>
#include <memory>
auto main() -> int
{
using namespace std;
auto sp1 = shared_ptr<int>{}; // shared_ptr 생성은 하였으나 아직까지는 가리키는 객체가 없음.(nullptr)현재 use_count = 0
if( sp1)
cout << "sp1 is initialized! \n" << endl;
else
cout << "sp1 is not initialized! \n" << endl; // 따라서 여기 출력됨 !
/*
unique 함수는 내부에서 ,use_count가 1이면 true 리턴해주는 함수이다.
*/
if( sp1.unique() )
cout << "sp1 is unique \n" << endl;
else
cout << "sp1 is not unique \n" << endl;
cout << "\n=======================================\n" << endl;
/*
sp1 에 객체 생성해서 넣어줌. (use count +1). 이제 initialize 되었고 true == unique()
*/
sp1 = make_shared<int>(1234);
cout << "sp1 usecount = " << sp1.use_count() << endl;
cout << "\n=======================================\n" << endl;
/*
sp1이 가리키는 객체를 함께 가리키는 sp2 생성.
shared_ptr 의 operator= 는 내부에서 _swap 함수를 호출하던데, 그럼 _swap 함수에서 참조 카운트+1을 해주겠지?
*/
auto sp2 = sp1;
cout << "sp1 usecount = " << sp1.use_count() << endl;
sp2.reset();
cout << "sp1 usecount = " << sp1.use_count() << endl;
return 1;
}
< 요약 >
-
unique_ptr 이 복사 생성자, 복사 할당자를 delete 함으로써 객체 독점성을 제공했다면
shared_ptr은 복사 생성자, 복사 할당자를 제공하되 이 함수들이 호출되면 참조 횟수를 +1 함으로써 객체 공유성을 제공한다.
-
unique() 함수는 내부에서 참조 카운트==1이면 true를 반환하는 함수
-
make_shared<> 를 사용해야 한다. make_shared<> 는 객체를 저장할 메모리 공간과 참조 횟수를 유지하는데 필요한 공간을 한번에 할당하기 때문에 속도가 빠르다.
'Dev Language > Modern C++ (C++11, 14)' 카테고리의 다른 글
C++ 11 : 열거타입 enum (0) | 2020.08.08 |
---|---|
C++ 11 : nullptr (0) | 2020.08.08 |
C++ 11 : std::function 함수 객체? 함수면 함수고 객체면 객체인데, 함수 객체는 무엇인가 ? (0) | 2020.08.08 |
C++ 11 : auto_ptr (0) | 2020.08.08 |
C++ 11 : unique_ptr (0) | 2020.08.08 |