There are three ways to hi(unique_ptr: defining) define tt(unique_ptr) objects. Each definition contains the usual tt() specifier between angle brackets: itemization( it() The default constructor simply creates a tt(unique_ptr) object that does not point to a particular block of memory. Its pointer is initialized to 0 (zero): verb( unique_ptr identifier; ) This form is discussed in section ref(UNIQUEPLAIN). it() The em(move constructor) initializes an tt(unique_ptr) object. Following the use of the move constructor its tt(unique_ptr) argument no longer points to the dynamically allocated memory and its pointer data member is turned into a zero-pointer: verb( unique_ptr identifier(another unique_ptr for type); ) This form is discussed in section ref(UNIQUEMOVE). it() The form that is used most often initializes a tt(unique_ptr) object to the block of dynamically allocated memory that is passed to the object's constructor. Optionally ti(deleter) can be provided. A (free) function (or function object) receiving the tt(unique_ptr)'s pointer as its argument can be passed as deleter. It is supposed to return the dynamically allocated memory to the common pool (doing nothing if the pointer equals zero). verb( unique_ptr identifier (new-expression [, deleter]); ) This form is discussed in section ref(UNIQUENEW). )