Utility

Defined in header <clone/utility.hpp>

NVI (reference???)


class my_base {
private:
    virtual std::unique_ptr<my_base> do_clone() const = 0;

public:
    virtual ~my_base() noexcept = default; ///< Make dtor virtual

    /// \brief TODOCUMENT
    std::unique_ptr<my_base> clone() const {
        return check_uptr_clone_against_this( do_clone(), *this );
    }
};
class my_derived final : public my_base {
private:
    /// \brief TODOCUMENT
    virtual std::unique_ptr<my_base> do_clone() const override final {
        return { make_uptr_clone( *this ) };
    }
};

Recommend the following in the base class

my_base(const my_base &)                 = default; ///< Specify copy-ctor   required
my_base(my_base &&) noexcept             = default; ///< Specify copy-assign required
my_base & operator=(const my_base &)     = default; ///< Specify move-ctor   required
my_base & operator=(my_base &&) noexcept = default; ///< Specify move-assign required

Functions

Within namespace clone_tools

| | |:--- |:--- | | check_uptr_clone_against_this | Check dynamic type returned by virtual do_clone() in debug mode
(function template) | | make_uptr_clone | Make a std::unique_ptr clone of the specified object using its copy-ctor
(function template) |