Что значит "поэлементно удалять содержимое вектора"?
например, если у меня там указатели на другие объекты
Хранить сырые указатели в векторе?
Тогда юники надо хранить
что в таком случае будет лучше? удалить объекты, на которые указывают указатели и clear() или так же удалить, но потом создавать новый вектор(лист)?
Лучше создать вектор юников и прекратить усложнять себе жизнь
Или даже по васянски: for(auto& a : vec) delete[] a; // или delete a; vec.clear();
Упёрлись рогом?)
Что за такая таинственная причина не дает использовать RAII?
у меня был практически такой же вариант
А юник_птр"ы религия запрещает использовать?
нет. слышал где-то, что умные указатели замедляет работу, точно не помню, но вроде бы в каком-то из видео с А. Полухиным. А если у меня всего лишь одна структура с этими указателями, то ничего страшного в очищении памяти я тут не вижу.
Это чушь, в целом. Юники и весят-то почти столько же, сколько обычные указатели. Логично, что некоторый оверхед есть, но он пренебрежительно мал, по сравнению с получаемыми преимуществами
а какие преимущества для моей задачи? возможность не писать дополнительные 2-4 строчки кода для удаления?
Память не потеряешь, безопасно с точки зрения исключений, всё такое... Преимущества они одинаковые. Какая у тебя задача я без понятия. Но нет выбора использовать или не использовать умные указатели, есть только выбор использовать
если будет исключение, то моя программа все равно закроется)
а если я свой умный указатель создам? для него нужны только конструктор и деструктор? если считать, что он не будет иметь каких-то доп. возможностей
Ну строго говоря нет. У него как минимум должны быть удалены копирующий конструктор и присваивание
copy_constr(copy_constr const&) = delete;
Правда что ли? Покажи
Как определил? Надеюсь ты не тупо вставил код, который тебе показали.
Его в данном случае нет
https://pastebin.com/rkynwgHj тут присваивание, с копирование дополнительные ошибки
я лучше знаю как будет работать моя программа
Так тут у тебя нет удалённого конструктора
это присваивание, а не копирование
У тебя нет ни присваивания, ни копирования. Только по умолчанию сгенерированные, которые надо удалить. А, ладно, присваивание есть. Ну так и с конструктором копирования сделай
так оно с присваиванием не работает.
Что ты ожидаешь, если ты удалил функцию?
Конечно оно не работает, так и должно быть. Что, по-твоему, произойдёт, если ты сделаешь копирование указателя?
её не будет. Ошибка компиляции, возможно?
в смысле? скопируется
Обсуждают сегодня