Самостоятельно реализовать "умный указатель", осуществляющий стратегию единоличного владения ресурсом, аналогичный std::unique_ptr
Интерфейс указателя должен:
*
и ->
).template<class Type, class TDeleter>
class UniquePTR {
typedef UniquePTR<Type, TDeleter> t_UniquePTR;
public: // Constructors and destructor.
UniquePTR();
UniquePTR(Type *pObject);
UniquePTR(t_UniquePTR &&uniquePTR); // Move constructor.
~UniquePTR();
public: // Assignment.
UniquePTR& operator=(t_UniquePTR &&uniquePTR);
UniquePTR& operator=(Type *pObject);
public: // Observers.
Type& operator*() const; // Dereference the stored pointer.
Type* operator->() const; // Return the stored pointer.
Type* get() const; // Return the stored pointer.
TDeleter& get_deleter(); // Return a reference to the stored deleter.
operator bool() const; // Return false if the stored pointer is null.
public: // Modifiers.
Type* release(); // Release ownership of any stored pointer.
void reset(Type *pObject = nullptr); // Replace the stored pointer.
void swap(t_UniquePTR &uniquePTR); // Exchange the pointer with another object.
private: // Disable copy from lvalue.
UniquePTR(const t_UniquePTR&) = delete;
t_UniquePTR& operator=(const t_UniquePTR&) = delete;
};