STL容器的記憶體管理
阿新 • • 發佈:2018-12-14
class Unit
{
public:
Unit();
Unit(int id);
~Unit();
private:
int id = -1;
};
Unit::Unit()
{
}
Unit::Unit(int _id) :id(_id){
printf("Unit construction. id=%d\n", id);
}
Unit::~Unit()
{
printf("Unit destruction. id=%d\n", id);
}
1、如果容器中儲存了物件指標,則要在清除容器前手動刪除指標,否則就會記憶體洩露。
std::vector<Unit*> units; units.reserve(100); for (int i=0;i<3;++i) { units.push_back(new Unit(i)); } for (Unit* ptr:units) { delete ptr; ptr = nullptr; }
2、如果容器中儲存了物件,存在多次複製的問題。建議儲存指標。