Проект c++/cli есть класс:
Код | [Serializable] public ref class sFile { public: private: String^ m_extension; String^ m_place; String^ m_name; public: sFile(String^ place, String^ name, String^ ext); };
[Serializable] public ref class sDir { private: List<sFile^> ^m_files; List<sDir^> ^m_dirs; String^ m_place; String^ m_name; public: sDir(String^ place, String^ name); };
[Serializable] public ref class sDrive { private: List<sFile^> ^m_files; List<sDir^> ^m_dirs; String^ m_name; public: sDrive(String^ name); };
public ref class MySearch { private: List<sDrive^> ^drives; public: MySearch(String^ pathToDb); ~MySearch(); };
|
т.е. у меня где то по коду создается экземпляр gcnew MySearch, дальше по коду создается gcnew List<sDrive^> и так далее, создается куча объектов, а в этих объектах создаются gcnew String, так вот, в конце работы программы, выделенной памяти получается под 300 Mb, я рекурсивно вроде освобождаю память в деструкторе MySearch, но что то ничего не освобождается.... как было 300 Mb, так и остается. Вот как я удаляю:
Код | void MySearch::FreeAllMemory(List<sDir^> ^Dirs) { List<sDir^>::Enumerator ^it_dir = Dirs->GetEnumerator(); while (it_dir->MoveNext()) { if (it_dir->Current->GetFiles()) delete[] it_dir->Current->GetFiles(); if (it_dir->Current->GetDirs()->Count > 0){ FreeAllMemory(it_dir->Current->GetDirs()); delete[] it_dir->Current->GetDirs(); } } }
MySearch::~MySearch() { List<sDrive^>::Enumerator ^it_drive = drives->GetEnumerator(); while (it_drive->MoveNext()) { if (it_drive->Current->GetFiles()) delete[] it_drive->Current->GetFiles(); if (it_drive->Current->GetDirs()){ FreeAllMemory(it_drive->Current->GetDirs()); delete[] it_drive->Current->GetDirs(); }
} delete[] drives; }
|
|