summaryrefslogtreecommitdiff
path: root/boost/signals2/trackable.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/signals2/trackable.hpp')
-rw-r--r--boost/signals2/trackable.hpp17
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