Реклама

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

QVector

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

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

День добрый

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответы

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

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

  • Результат 50 баллов
  • Очки рейтинга -4

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

  • Результат 80 баллов
  • Очки рейтинга 4

C++ - Тест 001. Первая программа и типы данных

  • Результат 6 баллов
  • Очки рейтинга -10
Последние комментарии

QML - Урок 002. Custom Button in QML Android

Нашел http://doc.qt.io/Qt-5/qtquickcontrols2-customize.html#customizing-button

QML - Урок 002. Custom Button in QML Android

А как кастомайзить Button если использовать QtQuick.Controls 2.0 ? В этом случае пишет Cannot assign to non-existent property "style"

  • EVILEG
  • 15 ноября 2017 г. 13:56

Qt/C++ - Урок 072. Пример векторного редактора на Qt

You need add common QWidget to form, after that you need right-click on this QWidget in the form and select "Promote to..." in Context Menu. After that You will see dialog. In dialog choose Ba...

  • cordsac
  • 15 ноября 2017 г. 3:33

Qt/C++ - Урок 072. Пример векторного редактора на Qt

Sir,In this form design how did you add verectanglesettings.ui,vepolylinesettings.ui UI's to this mainwindow.ui ? have any QT tool to add so. this image shows what I meaning.

Сейчас обсуждают на форуме
  • Docent
  • 21 ноября 2017 г. 19:39

Видео на сцене QGraphicsScene, как правильно сделать?

Ситуация такая: имеется область в памяти в которую пишутся кадры с камеры. Каким наиболее оптимальным образом отобразить их на сцене. У меня это реализовано таким образом, но подозреваю что мо...

Многопоточность. Ошибки при обращении к переменной

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

как отключить событие при открытии формы?

как обойти проблему: см. комментарий кода - может кто подскажет. TableView { id: table model: tableModel anchors.fill: parent focus: true Component.onComple...

  • EVILEG
  • 21 ноября 2017 г. 14:40

QGraphicsItem конструктор с параметрами

За что именно отвечают x_c , y_c ? Это положение объекта на графической сцене? Тогда лучше не в методе paint их применять, а через метод setPo...

  • EVILEG
  • 21 ноября 2017 г. 1:36

QGraphicsItem

Я так понимаю, вы каким-то образом передаёте указатель на отрисовываемый текст, то есть на QString. Но лучше добавить переменную в объявление класса, которая будет отвечать за текст, и п...