#include <iostream>
#include <memory>
using namespace std;

class Test {
	int n;
public:
	Test(int n) : n{n} { cout<<"Constructor"<<n<<endl; }
	void show() { cout <<"Do something"<<n<<endl; }
	~Test() { cout << "Destructor"<<n<<endl; }
};

class TestDeleterWrong {
public:
	void operator()(Test* x) {
		x->show(); 
	} 
};
class TestDeleterRight {
public:
	void operator()(Test* x) {
		x->show(); 
		delete x; 
	} 
};

int main() {
	{
		auto p = make_unique<Test>(1);    //ok
	}
	{
		auto p = unique_ptr<Test>(new Test(2));    //ok
	}
	{
		auto p = unique_ptr<Test, TestDeleterWrong>(new Test(3));   // no 
	}
	{
		auto p = unique_ptr<Test, TestDeleterRight>(new Test(4));   // ok 
	}
	return 0;
}