#include <iostream>
#include "Resource.h"

void soSomething(std::unique_ptr<Resource> res)
{
   
}

int main()
{   
    //soSomething(std::unique_ptr<Resource>(new Resource(1000000))); 이 방법보단
    //soSomething(std::make_unique<Resource>(100000)); 이 방법이 좋다
    
    
    Resource *res = new Resource(3);
    res->setAll(1);
    std::shared_ptr<Resource> ptr1(res); // 내부적으로 자기가 가리키고 있는 주소의 포인터가 몇군데에서 share를 하고 있는지 셀 수 있다.
    
    auto ptr1 = std::make_shared<Resource>(3); // 이런식으로 초기화하는 것을 추천.
    
    ptr1->print();
    
    {
        std::shared_ptr<Resource> ptr2(ptr1);
        //std::shared_ptr<Resource> ptr2(res); 이렇게 될 경우 ptr1은 ptr2가 res의 주소를 가지고 있는지 몰라서 이 block을 나갈 경우
        									// res의 메모리를 지워버리기 때문에 문제가 생길 수 있다.
        //auto ptr2 = ptr1;
        ptr1->setAll(1);
        
        ptr2->setAll(3);
        ptr2->print();
    }
    
    ptr1->print();
    
    return 0;
}