从向量中删除结构,解构它吗?

时间:2017-05-28 02:11:07

标签: c++ vector struct

我在这里使用vector

//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 个答案:

答案 0 :(得分:1)

是的,当从向量中删除元素时,它会被销毁,并且应该释放它所拥有的任何资源。我说&#34;应该&#34;因为这取决于元素类型的正确实现 - 我们必须假设元素类型被实现,以便销毁它不会泄漏任何资源。

在您的特定情况下,Record是一个包含整数和std::string的结构,这将按预期工作:从向量(或任何其他STL容器)中删除Record )将释放整数和字符串使用的内存。

答案 1 :(得分:1)

是。 std::vector::erase做的是

  

通过删除的元素数量减少容器大小,这些元素将被销毁。

您可以找到参考here