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) |