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

class Hoge {
public:
	Hoge() { cout << "Create Hoge!" << endl; }
	~Hoge() { cout << "Delete Hoge!" << endl; }
	
	weak_ptr<Hoge> next;		// weak_ptr を使用
};

int main() {
	shared_ptr<Hoge> hoge1(new Hoge());
	shared_ptr<Hoge> hoge2(new Hoge());

	// 循環参照状態にする
	hoge1->next = hoge2;
	hoge2->next = hoge1;

	// デストラクタが呼ばれる！
	// (正しく領域破棄されている)
	return 0;
}
