Можно ли это назвать нормальной реализацией std::unique_ptr?

Обновил

template <class T>
class My_unique_ptr
{
private:
    T * ptr;
public:
    My_unique_ptr(T * s_ptr=nullptr) : ptr(s_ptr)
    {
    }

~My_unique_ptr()
{
    delete ptr;
}

My_unique_ptr(const My_unique_ptr& value) = delete;             // запретили конструктор копирования

My_unique_ptr(My_unique_ptr&& s_ptr) : ptr(s_ptr.ptr)
{
    s_ptr.ptr = nullptr;
}


My_unique_ptr& operator=(const My_unique_ptr& value) = delete;  // запретили копирование

My_unique_ptr& operator=(My_unique_ptr&& s_ptr)
{
    if (&s_ptr == this)
        return *this;

    delete ptr ;

    ptr = s_ptr.ptr;
    s_ptr.ptr = nullptr;

    return *this;
}

operator bool() const { if (ptr) return true; else return false; }
T* operator->() const { return ptr == ; }
T& operator*() const 
{ 
    assert(ptr && "is nullptr");
    return *ptr; 
}

void swap(My_unique_ptr& obj) noexcept
{
    T* temp{ std::move(obj.ptr) };
    obj.ptr = ptr;
    ptr = temp;
}

void reset(T* obj = nullptr) noexcept
{
    if (ptr)
        delete ptr;
    if (obj)
        ptr = obj;
}

T * release() noexcept
{
    T * old_ptr = ptr;
    ptr = nullptr;
    return old_ptr;
}

T * get() noexcept
{
    return ptr;
}

};

Ответы (1 шт):

Автор решения: user7860670

В operator= происходит утечка памяти.

В operator* нет даже ассерта на разыменование нулевого указателя.

Нет варианта работы с указателем, выделенным при помощи new[].

Нет варианта предоставления пользовательской функции освобождения ресурсов.

Нет поддержки noexcept.

→ Ссылка