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