Opened 21 years ago
Closed 19 years ago
#34 closed Feature Requests (Rejected)
enhance shared_ptr with traits class
Reported by: | mkvonarx | Owned by: | Peter Dimov |
---|---|---|---|
Milestone: | Component: | smart_ptr | |
Version: | None | Severity: | |
Keywords: | Cc: |
Description
I suggest introducing a traits class for the boost smart pointers (shared_ptr and shared_array only) that take over responsibility for reference counting: ref_count_traits. With such a design, every user of the boost smart pointers could add specific additional features like thread safety, objects knowing about being reference counted, objects handling reference counting themselves (but still be used via boost smart pointers) etc. The default implementation of ref_count_traits could look somehow like this: template<typename T> class ref_count_traits { public: struct ref_counted_ptr { typedef long ref_count_counter_type; explicit ref_count_ptr_impl(T* p): px(p) { try { pn = new ref_count_counter_type(0); } catch(...) { delete p; throw; } } T* px; // contained pointer ref_count_counter_type* pn; // ptr to reference counter }; typedef ref_counted_ptr ref_count_ptr_type; static T* get(const ref_count_ptr_type& pr) { return pr.px; } static ref_count_counter_type count(const ref_count_ptr_type& pr) { return pr.pn; } static void inc(const ref_count_ptr_type& pr) { ++*pr.pn; } static void dec(const ref_count_ptr_type& pr) { if(--*pr.pn == 0) { delete pr.pn; delete pr.px; } } };
Note:
See TracTickets
for help on using tickets.