2017-05-28 29 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