Compile-time adapters

In Chapter 16Policy-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 O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.