TL;DR

#include <iostream>
#include <memory>
 
using namespace std;
 
int main() {
	// `shared_ptr` 생성
	auto sh1 = make_shared<int>(123);
	// 이렇게 하면 포인터가 복사된다 (copy constructor)
	auto sh2 = sh1;
	auto sh3 = shared_ptr<int>(sh1);
 
	// `use_count()` 는 `shared_ptr` 의 reference count 를 반환한다.
	cout << sh1.use_count() << endl;
 
	// 같은 포인터인지 확인
	cout << "sh1 == sh2 ? " << boolalpha << (sh1 == sh2) << endl;
	cout << "sh1 == sh3 ? " << boolalpha << (sh1 == sh3) << endl;
 
	// `unique_ptr` 생성
	auto un1 = make_unique<int>(1234);
	// `unique_ptr` 은 복사가 안되고, 따라서 이건 컴파일 에러가 난다
	auto un2 = un1;
}