#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;
}