2017-05-28 39 views
-2

我有这样的结构在这里与向量从矢量中移除结构,解构它?

//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()); 

如果它没有得到解构和释放空间,我该怎么做?

回答

1

是的,当一个元素从一个向量中被移除时,它就被销毁了,它所拥有的任何资源都应该被释放。我说“应该”,因为这取决于适当的元素类型的实现 - 我们必须假定元素类型被实现,使得销毁它不会泄漏任何资源。

你的具体情况,Record是包含整数和std::string秒的结构,正如你预料这将工作:从载体(或任何其他STL容器)取出Record将释放由整数和字符串使用的内存。

+0

如何正确实现元素类型,请您解释一下吗? – Skelelele

+0

@Skelelele可能通过实现构造函数和析构函数。阅读关于RAII习语的更多信息,您将更多地了解对象以及如何在C++中使用它们。 –

+1

@Skelelele:你只要确保销毁你的元素不会泄漏任何东西。你的'Record'已经正确实现了,因为它没有使用任何指针。 –

1

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

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

你可以找到参考here