diff options
Diffstat (limited to 'boost/signals2/trackable.hpp')
-rw-r--r-- | boost/signals2/trackable.hpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/boost/signals2/trackable.hpp b/boost/signals2/trackable.hpp index d6a60149a7..dba001da45 100644 --- a/boost/signals2/trackable.hpp +++ b/boost/signals2/trackable.hpp @@ -24,11 +24,20 @@ namespace boost { namespace detail { class tracked_objects_visitor; + + // trackable_pointee is used to identify the tracked shared_ptr + // originating from the signals2::trackable class. These tracked + // shared_ptr are special in that we shouldn't bother to + // increment their use count during signal invocation, since + // they don't actually control the lifetime of the + // signals2::trackable object they are associated with. + class trackable_pointee + {}; } class trackable { protected: - trackable(): _tracked_ptr(static_cast<int*>(0)) {} - trackable(const trackable &): _tracked_ptr(static_cast<int*>(0)) {} + trackable(): _tracked_ptr(static_cast<detail::trackable_pointee*>(0)) {} + trackable(const trackable &): _tracked_ptr(static_cast<detail::trackable_pointee*>(0)) {} trackable& operator=(const trackable &) { return *this; @@ -36,12 +45,12 @@ namespace boost { ~trackable() {} private: friend class detail::tracked_objects_visitor; - const shared_ptr<void>& get_shared_ptr() const + weak_ptr<detail::trackable_pointee> get_weak_ptr() const { return _tracked_ptr; } - shared_ptr<void> _tracked_ptr; + shared_ptr<detail::trackable_pointee> _tracked_ptr; }; } // end namespace signals2 } // end namespace boost |