М
Қар. 14, 2017, 2:43 Т.Қ.

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

QVector

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

QVector<double> A3(382);
//заполняю вектор
A3.~QVector();  //пытаюсь удалить
qDebug() << A3; //все равно выводит
При использовании  delete A3; выводит ошибку.
3
Сұрақ мақалада қойыладыQt/C++ - Сабақ 037. QVector көмегімен екі өлшемді массив

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

7
Evgenii Legotckoi
  • Қар. 14, 2017, 2:48 Т.Қ.
  • (өңделген)

День добрый

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

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

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

      Evgenii Legotckoi
      • Қар. 14, 2017, 3:18 Т.Қ.

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

        Evgenii Legotckoi
        • Қар. 14, 2017, 3:28 Т.Қ.
        • (өңделген)

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

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

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

            Evgenii Legotckoi
            • Қар. 14, 2017, 3:32 Т.Қ.
            • (өңделген)

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

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

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

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

                Пікірлер

                Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                Кіріңіз немесе Тіркеліңіз