我開始掌握指針並避免內存泄漏...如果存儲在指針圖中,是否需要刪除對象?
雖然我有一個問題...在我開始之前,我沒有使用C++ 11,所以請不要回復智能指針和信息,特定於C++ 11 ...
我有以下代碼...
class Test
{
public:
Test(const int s_id, const std::string s_name) :
id(s_id),
name(s_name)
{
};
const int GetID()
{
return id;
}
private:
const int id;
const std::string name;
};
class TestCollection
{
public:
void AddTest(Test& my_test)
{
tests[my_test.GetID()] = &my_test;
}
void RemoveTest(const int id)
{
if (tests.find(id) != tests.end())
{
tests.erase(id);
}
}
public:
std::map<int, Test*> tests;
};
int _tmain(int argc, _TCHAR* argv[])
{
TestCollection collection;
Test my_test(0, "First Test");
collection.AddTest(my_test);
collection.RemoveTest(0);
return 0;
}
我的問題是,我需要做什麼要清理我在調用RemoveTest時從my_test獲取內存?爲了避免內存泄漏?
我知道,當我使用新的關鍵字,我需要調用刪除...但是我在這種情況下做什麼?
它只是由垃圾收集器自動清理嗎?
這取決於如何分配對象。但更好的發佈實際代碼。 – juanchopanza
該代碼實際上不會編譯。 'tests'只能存儲指針,而你正在嘗試存儲一個引用。 –
您只需要'刪除'用'new'分配的對象。在其他對象上使用'delete'是未定義的行爲(我認爲)。 – Florian