Listing 2: The resource_manager class in action.
template <class storage_policy, class ownership_policy>
class resource_manager
: public optimally_inherit<storage_policy, ownership_policy>::type
{
...
~resource_manager() {
if (!ownership_policy::release(get_impl(*this))) {
storage_policy::release();
}
}
};
template <
typename T,
template <typename> class ownership_policy = ref_counted,
template <typename> class conversion_policy = disallow_conversion,
template <typename> class checking_policy = assert_check,
template <typename> class storage_policy = scalar_storage>
class smart_ptr
: public optimally_inherit<
resource_manager<
storage_policy<T>,
ownership_policy<T>
>,
optimally_inherit<
checking_policy<T>,
conversion_policy<T>
>
>
{
...
};