| 41 | }; |
| 42 | |
| 43 | class LocalResourceManagerRef : public NonCopyableObj { |
| 44 | private: |
| 45 | std::weak_ptr<LocalResourceManager> m_manager; |
| 46 | |
| 47 | public: |
| 48 | LocalResourceManagerRef() { |
| 49 | auto manager = std::make_shared<LocalResourceManager>(); |
| 50 | mgb_assert( |
| 51 | local_managers.insert({manager->id(), manager}).second, |
| 52 | "duplicated local manager"); |
| 53 | m_manager = manager; |
| 54 | } |
| 55 | |
| 56 | ~LocalResourceManagerRef() { |
| 57 | if (auto manager = m_manager.lock()) { |
| 58 | local_managers.erase(manager->id()); |
| 59 | } |
| 60 | } |
| 61 | |
| 62 | ResourceManager& operator*() { return *m_manager.lock(); } |
| 63 | }; |
| 64 | |
| 65 | } // namespace |
| 66 | |