Compile-time adapters

In Chapter 16, Policy-Based Design, we learned about policies, which are building blocks for classes—they let the programmer customize the implementation for a particular behavior. As an example, we can implement this policy-based smart pointer that automatically deletes the object it owns. The policy is the particular implementation of the deletion:

template <typename T,           template <typename> class DeletionPolicy = DeleteByOperator>class SmartPtr {    public:    explicit SmartPtr(        T* p = nullptr,        const DeletionPolicy<T>& deletion_policy = DeletionPolicy<T>()        ) : p_(p),            deletion_policy_(deletion_policy)    {}    ~SmartPtr() {         deletion_policy_(p_);    }    ... pointer interface ...    private:    T* p_;    DeletionPolicy<T> deletion_policy_;}; ...

Get Hands-On Design Patterns with C++ now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.