On 12/4/20 7:11 PM, Billy via Boost wrote:
Hi Boost,
We're considering implementing our own atomic ref count for `intrusive_ref_count` [*]. A question came up. Is the `CounterPolicyT` template parameter a stable extension hook, or are users expected to strictly stick to the two provided policies of `thread_unsafe_counter` and `thread_safe_counter`? I can see that under the hood, these policy structs are trivially simple and we can just do it, but the question is really about whether the lack of documentation implies that it's a private boost detail.
From https://www.boost.org/doc/libs/1_74_0/libs/smart_ptr/doc/html/smart_ptr.html...
"The second parameter is a policy that defines the nature of the reference counter. The library provides two such policies: thread_unsafe_counter and thread_safe_counter."
As an original implementor of the component, I did not intend this to be an extension point. If I wanted to customize reference counting, I would probably not use intrusive_ref_counter and instead implement intrusive_ptr_add_ref/release or a similar base class to my requirements.
[*] Incidentally we want to increment with memory order relaxed instead of acq_rel.
This would probably be a good optimization in atomic_count.