У меня есть эта структура здесь с вектором

//Record Structure
struct Record {
    std::string date;
    std::string name;
    int dollars = 0;
    int cents = 0;

    std::string getCost() {
        //Dollars First
        std::stringstream dollar;
        dollar << dollars;
        std::string DOLLAR = dollar.str();

        //Cents Second
        std::stringstream cent;
        cent << cents;
        std::string CENT = cent.str();

        //Display cents as double zeros
        DOLLAR = DOLLAR.length() == 1 ? "0" + DOLLAR : DOLLAR;
        CENT = CENT.length() == 1 ? "0" + CENT : CENT;

        //Result
        std::string result = "$" + DOLLAR + "." + CENT;

        //Return
        return result;
    }

    void Constructor(std::string NM, std::string DT, int DOLLAS, int PENNY) {
        name = NM;
        date = DT;
        dollars = DOLLAS;
        cents = PENNY;
    }
};

//Vector that holds instances of the Record structure
std::vector <Record> Records;

Скажем, я уже добавил экземпляр к вектору

Record newInstance;
newInstance.Constructor("Name", "Date", 10, 0);

Records.push_back(newInstance);

Если я так его стер, вся конструкция будет разрушена и освободит ли место?

Records.erase(Records.begin());

Если это не будет разрушено и освободить место, как бы я это сделал?

-2
Skelelele 28 Май 2017 в 05:11

2 ответа

Лучший ответ

Да, когда элемент удаляется из вектора, он уничтожается, и любые имеющиеся у него ресурсы должны быть освобождены. Я говорю «должен», потому что это зависит от правильной реализации типа элемента - мы должны предположить, что тип элемента реализован так, что его уничтожение не приводит к утечке ресурсов.

В вашем конкретном случае Record является структурой, содержащей целые числа и std::string s, и это будет работать так, как вы ожидаете: удаление Record из вектора (или любого другого контейнера STL) освободит память, используемая целыми числами и строками.

1
John Zwinck 28 Май 2017 в 02:14

Да. Что std::vector::erase делает

Уменьшает размер контейнера на количество удаляемых элементов, которые уничтожаются.

Вы можете найти ссылку здесь.

1
mercador 28 Май 2017 в 02:21