14 ноября 2017 г. 8:43

Как удалить QVector и освободить память

QVector

Здравствуйте.
Как удалить QVector и освободить память? В документации написано QVector::~QVector(). Делаю так, а он все равно остается.

QVector<double> A3(382);
//заполняю вектор
A3.~QVector();  //пытаюсь удалить
qDebug() << A3; //все равно выводит
При использовании  delete A3; выводит ошибку.
  • #
  • отредактировано 14 ноября 2017 г. 8:49
  • 14 ноября 2017 г. 8:48

День добрый

Никто так не делает )))

A3.~QVector();
Деструктор вызывается только оператором delete или автоматически, когда переменная объявлена локально в методе.
Оператор delete сработает без ошибок только в том случае, если память была выделена через оператор new.
В случае выделения памяти в стеке, эта память будет освобождена автоматически. Как раз ваш случай.

И как можно просто освободить память?

Бессмысленный вопрос вне рамок контекста.

  • Миша
  • #
  • отредактировано 14 ноября 2017 г. 9:28
  • 14 ноября 2017 г. 9:28

Я Вам уже ответил на ваш вопрос.
Либо оператором delete в том случае, если память выделялась через оператор new.

Либо никак, память будет автоматически освобождена, если она была выделена в стеке, то есть имеет определённую локальную видимость.
Так работает C++.
В том примере, что Вы привели нет никакой необходимости освобождать память. Она будет удалена автоматически, когда закончится время выполнения метода или жизни объекта, который содержит этот вектор.
Ваши попытки освобождения памяти не имеют смысла в данном случае, в данном контексте.

Спасибо. Но почему не работает ~QVector(); ?

  • Миша
  • #
  • отредактировано 14 ноября 2017 г. 9:32
  • 14 ноября 2017 г. 9:32

Потому, что так работает C++. Явно деструктор не вызывают в принципе. Удаление вызывается операторм delete.

В деструкторе описываются действия, которые необходимо произвести при удалении объекта. Например, удалить объекты, которые были созданы в куче через оператор new внутри данного объекта.
  • #
  • 14 ноября 2017 г. 9:34

Я бы вам посоветовал почитать книгу по контейнерам и как с ними работать. Если прочитаете про стандартные контейнеры будете понимать как с ними работать и с памятью что вы выделяете под них. Просто ощущение что вы просто что то пишите не понимая что и спрашиваете почему это не работает.
Вот такую книгу попробуйте
Стандартная библиотека С++: справочное руководство

2-е издание
Николаи М. Джосаттис

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
25 февраля 2018 г. 14:09
exxtra_noise

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 100 баллов
  • Очки рейтинга 10
25 февраля 2018 г. 14:06
exxtra_noise

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 60 баллов
  • Очки рейтинга -1
25 февраля 2018 г. 10:39
exxtra_noise

C++ - Тест 003. Условия и циклы

  • Результат 100 баллов
  • Очки рейтинга 10
Последние комментарии
26 февраля 2018 г. 0:55
soz7557

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

thanks, but Id should be the same the one as i select the image in tree view.

25 февраля 2018 г. 21:53
Console

Выпуск Qt 5.10

Здравствуйте.Планируется ли урок по Qt Network Authorization? Всё же интересная тема и информации маловато в интернете.

25 февраля 2018 г. 19:54
EVILEG

GameDev на Qt - Урок 4. Обнаружение коллизий в Qt (2D)

Сначала нужно что-нибудь написать, прежде чем это оптимизировать. А вообще все оптимизации исходят из совокупности условий, а не из того, что есть один танк и N треугольников. Да и области вид...

25 февраля 2018 г. 19:31
romankoshelev

GameDev на Qt - Урок 4. Обнаружение коллизий в Qt (2D)

А как насчет оптимизации. Тут ведь например будет ездить N треугольников, для каждого проводить линию и смотреть пересечения? +Это же происходит много раз в секунду.

25 февраля 2018 г. 16:15
EVILEG

GameDev на Qt - Урок 4. Обнаружение коллизий в Qt (2D)

Как вариант, использовать QLineF. Условно взять линию от положения танка, до положения треугольника. И проверить пересечение этой линии с другими линиями на карте с помощью метода intersect. Этот м...

Сейчас обсуждают на форуме
25 февраля 2018 г. 11:31
Mic78

How to retrieve a QCandlestickSet item from a QChartView?

Sorry, in the last sentence I wanted to write: "For that I need to know the maximum value of the QCandlestickSets in the zoomed area."

25 февраля 2018 г. 10:02
EVILEG

Проблема с ComboBox

Да, в принципе идея понятна. Можно воспользоваться одной исходной моделью и делать по ней поиск. Найденные элементы добавлять в модель для отображения. При этом исходная модель буд...

25 февраля 2018 г. 9:07
EVILEG

Qt управление окнами других программ

Добрый день! Это всё делается через WinAPI. В Qt не занимаются разработкой настолько платформозависимого функционала, который нужен единицам. Не знаю, что там было в Delphi, возможн...

21 февраля 2018 г. 13:26
sol11

Qtableviev после сортировки

Спасибо, всё заработало :) Единственное вот тут row на id поменял и всё круто :)) if(id == -1){ model->insertRow(model->rowCount(QModelIndex())); map...

20 февраля 2018 г. 13:18
alex_lip

Разбить один qml файл на несколько составляющих

Да спасибо. Просто после необходимости специфичных названий для файла - стараюсь обращать внимание на любую мелочь.