clone_tools::clone_ptr<T>

Defined in header <clone/clone_ptr.hpp>

Like std::unique_ptr but requires the managed type to support cloning and then uses that to support copy-construction and copy-assignment by cloning the managed object.

Doesn't currently support:

  • deleter
  • array version

Member types

pointer type   std::remove_reference<Deleter>::type::pointer if that type exists, otherwise T*. Must satisfy NullablePointer.
element_type T, the type of the object managed by this unique_ptr

Member functions

(constructor) constructs a new clone_tools::clone_ptr
(public member function)
(destructor) destructs the managed object
(public member function)
operator= assigns the clone_tools::clone_ptr
(public member function)

Modifiers

release               returns a pointer to the managed object and releases the ownership
(public member function)
reset replaces the managed object
(public member function)
swap swaps the managed objects
(public member function)

Observers

get returns a pointer to the managed object
(public member function)
operator bool checks if there is associated managed object
(public member function)
operator*
operator->
dereferences pointer to the managed object
(public member function)

Non-member functions

Within namespace clone_tools

TODO: make clear what (if anything) is the point of each of these functions.

make_unique constructs a new std::unique_ptr
(function template)
(until C++14)
make_clone constructs a new std::clone_ptr
(function template)
make_clone_of_uptr creates a clone_ptr from a std::unique_ptr (copy/move)
(function template)
make_const_clone_of_uptr creates a const clone_ptr from a std::unique_ptr (copy/move)
(function template)
clone_and_make_clone clones an object into a clone_ptr
(function template)
clone_and_make_const_clone clones an object into a const clone_ptr
(function template)

Type trait gubbins

Within namespace clone_tools

Observers

is_clone_v<> whether the type is a clone gubbins thing
(variable template)
since C++14
is_clone_v<> whether the type is a clone gubbins thing
(variable template)
since C++14

Observers

is_unique_ptr_v<> whether the type is a clone gubbins thing
(variable template)
since C++14
is_unique_ptr_after_decay_v<> whether the type is a clone gubbins thing
(variable template)
since C++14

Example

#include <clone/clone_ptr.hpp>

const auto ptr_a = make_clone<concrete_type_a, base_type>( "hello" );
const auto ptr_b{ ptr_a };