int main(void) { std::set<int> container; auto [iter, result] = container.emplace(42); { // コンテナ内の要素を指す shared_ptr をいくつも作る auto x = std::shared_ptr<decltype(iter)>(new decltype(container)::iterator(iter), [&container](decltype(container)::iterator* p) { container.erase(*p); delete p;}); auto y = x; auto z = x; // コンテナの中には要素が入ってる for (auto& x : container) std::cout << x << " "; std::cout << std::endl; // shared_ptr はここで消滅 } // デリータが消したのでもう残ってない for (auto& x : container) std::cout << x << std::endl; }