0からの、超初心者C++相談室at TECH0からの、超初心者C++相談室 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト504:デフォルトの名無しさん 23/07/13 01:46:39.34 a7xsv8mg.net shared_ptrの解放時にweak_ptrを登録していたSTLコンテナから登録抹消したいけど、 shared_ptrのデリータでshared_ptr自身は扱えないっぽい。 出来ないということは、何か他にいい方法があるか、根本的に何か考え方間違ってる? 505:はちみつ餃子 ◆8X2XSCHEME 23/07/13 18:07:22.25 46c6OBqO.net >>501 設計意図次第だけど コンテナにはオブジェクト本体をいれて shared_ptr は コンテナ内の要素を指すイテレータを指す という構造はどうだろう。 #include <iostream> #include <memory> #include <set> 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; } 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch