diff options
author | crupest <crupest@outlook.com> | 2019-05-27 01:25:02 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-05-27 01:25:02 +0800 |
commit | 2ab922e2a3ab82fc3c25b59f4d270101e54a31d7 (patch) | |
tree | 5a3af7bea0f204cf7ebc80a6e46276167d57b7d9 | |
parent | 3a3d0bdaaf932f6ca17f2de3447c989127bc143a (diff) | |
download | cru-2ab922e2a3ab82fc3c25b59f4d270101e54a31d7.tar.gz cru-2ab922e2a3ab82fc3c25b59f4d270101e54a31d7.tar.bz2 cru-2ab922e2a3ab82fc3c25b59f4d270101e54a31d7.zip |
...
-rw-r--r-- | include/cru/common/event.hpp | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/include/cru/common/event.hpp b/include/cru/common/event.hpp index ff99e745..d8a24330 100644 --- a/include/cru/common/event.hpp +++ b/include/cru/common/event.hpp @@ -41,7 +41,7 @@ class EventBase { }; } // namespace details -// A copyable and movable event revoker. +// A non-copyable and movable event revoker. // Call function call operator to revoke the handler. class EventRevoker { friend class ::cru::details::EventBase; @@ -52,9 +52,9 @@ class EventRevoker { : weak_resolver_(resolver), token_(token) {} public: - EventRevoker(const EventRevoker& other) = default; + EventRevoker(const EventRevoker& other) = delete; EventRevoker(EventRevoker&& other) = default; - EventRevoker& operator=(const EventRevoker& other) = default; + EventRevoker& operator=(const EventRevoker& other) = delete; EventRevoker& operator=(EventRevoker&& other) = default; ~EventRevoker() = default; @@ -136,28 +136,19 @@ class Event : public details::EventBase { EventHandlerToken current_token_ = 0; }; -namespace details { -struct EventRevokerGuardDestroyer { - void operator()(EventRevoker* p) const { - (*p)(); - delete p; - } -}; -} // namespace details - class EventRevokerGuard { public: - explicit EventRevokerGuard(EventRevoker revoker) - : revoker_(new EventRevoker(std::move(revoker))) {} + explicit EventRevokerGuard(EventRevoker&& revoker) + : revoker_(std::move(revoker)) {} EventRevokerGuard(const EventRevokerGuard& other) = delete; EventRevokerGuard(EventRevokerGuard&& other) = default; EventRevokerGuard& operator=(const EventRevokerGuard& other) = delete; EventRevokerGuard& operator=(EventRevokerGuard&& other) = default; - ~EventRevokerGuard() = default; + ~EventRevokerGuard() { revoker_(); } - EventRevoker Get() const { return *revoker_; } + EventRevoker ReleaseAndGet() { return std::move(revoker_); } private: - std::unique_ptr<EventRevoker, details::EventRevokerGuardDestroyer> revoker_; + EventRevoker revoker_; }; } // namespace cru |