簡體   English   中英

刪除C ++ STL中包含向量的動態分配對象

[英]deleting dynamically allocated object that contains vector in C++ STL

我有一堂課

class ChartLine{

protected:
        vector<Point> line; // points connecting the line
        CString name; //line name for legend        
        CPen pen; //color, size and style properties of the line
};

點是結構

struct Point{
    CString x;
    double y;    
};

main()我使用new運算符動態分配了ChartLine類型的對象。 如果以后使用delete ,默認析構函數~ChartLine()是否會正確地釋放(或清除)成員ChartLine::line (向量btw),還是必須手動在~ChartLine()清除該向量?

提前致謝。 干杯。

隱式創建的析構函數將調用所有成員的析構函數(以相反的順序在類中聲明它們)。 vector將在其自身之后進行清理。 您不需要自己定義析構函數。

這就是為什么您應該偏愛將自動分配與RAII結合使用的原因。 當對象清理自身時,您的代碼將更安全,更輕松。 提示:不要使用new和delete,將其放在智能指針中!

std::auto_ptr<int> p(new int(5));
boost::shared_ptr<int> p = boost::make_shared<int>(5);

這兩個都將自動刪除,現在您也很安全。 (請注意,上面的兩個功能不同 。智能指針的類型更多 。)

是的,銷毀矢量時,矢量中的所有對象都將銷毀。 從外觀上看,您的代碼應按原樣運行(盡管假定CString是MFC的CString ,但它的某些舊版本存在一些內存泄漏...)

您唯一需要擔心析構函數中的向量(或其他容器)的情況是,它們是否包含指向對象的指針。 由於您的情況並非如此,因此您應該沒事。

唯一需要調用delete是在調用new 其他一切都已處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM