Как установить деструктор для класса с unique_ptr <double []>. экземпляр создан make_unique () - PullRequest
0 голосов
/ 29 июня 2019

У меня есть класс, переменная-член std::unique_ptr<double[]>.Инициализация этой переменной всегда выполняется make_unique<double[]>(size).Но я не знаю, как написать код для деструктора для этой переменной-члена

Я знаю, std::unique_ptr имеет метод get_deleter(), но когда я смотрю на документы, он просто обеспечивает самоопределение удаления.Я делаю некоторые исследования о похожих примерах.Но все они о новых className(), а не make_unique().

версией cpp является c ++ 17

Мой код

class test{
public:
     test(int size) : size_{size}, arr_{make_unique<double[]>( size )} {}

     ~test(){
         // how to destroy arr_
     }
private:
    int size_;

    std::unique_ptr<double[]> arr_;
};

Я делаюне знаю с чего начать.Я знаю, что есть ключевое слово delete, но я думаю, что в этом случае оно бесполезно.

Ответы [ 2 ]

3 голосов
/ 29 июня 2019

Ни в коем случае не пишите деструктор.

std::unique_ptr выполнит для вас корректную очистку, и действительно, в этом и заключается главный смысл использования unique_ptr.

По возможности, следуйте правилу нуля : правильно используйте умные указатели и контейнеры и не объявляйте деструктор, конструктор копирования, конструктор перемещения, назначение копирования или перемещение.(См. Ссылку для обсуждения основного исключения, объявления виртуального деструктора интерфейса и удаления или дефолта остальных.)

1 голос
/ 29 июня 2019

Я не знаю, как написать код для деструктора для этой переменной-члена

Ничего конкретного не нужно писать для уничтожения любой переменной-члена. Все элементы-члены, а также объекты базового класса уничтожаются всеми деструкторами после выполнения тела деструктора.

Нет необходимости делать что-либо в теле деструктора, и, следовательно, для класса достаточно неявно сгенерированного деструктора.

...