О, чувак. В вашем коде есть серьезные проблемы.
Во-первых, у вас есть
class CLog
{
char* m_threadname;
public:
CLog()
{
m_threadname = new char[20];
}
~CLog()
{
delete[ ] m_threadname;
}
};
Это C ++, а 2011 год, пожалуйста, не делайте этого. И если вы это сделаете, не претендуйте на производительность в качестве причины. Вместо этого сделайте это:
class CLog
{
std::string m_threadname;
};
См!
Во-вторых, вы копируете векторы с элементами указателя и удивляетесь, когда элементы первого вектора исчезают, когда элементы второго вектора удаляются. Вы знаете, это тот же самый элемент. Вектор - это просто контейнер, а не владелец. Вы, как программист, владеете элементами. Вектор просто держит их.
Вы можете использовать
typedef vector<shared_ptr<CLog>> CLogData;
Чтобы решить вашу проблему. Или предпочтительно
typedef vector<CLog> CLogData;
что еще лучше, пока не доказано обратное. Вы не дали вескую причину, почему это плохая идея.
Используй стек, это твой друг.
Изменить:
Кроме того, вам нужно привести свои рекомендации в порядок. В
void CMultiThreadedDlg::DeleteData(CLogData tLogData)
{
for(size_t i = 0; i < tLogData.size()-1; ++i)
{
CLog* log = (CLog*)tLogData[i];
delete log;
}
tLogData.clear();
}
Вы передаете вектор копию на DeleteData
, и копия будет .clear()
, а не оригинал. Может быть опасно, если оно висит вокруг вас и вы думаете, что у него есть действительные указатели, которых у него нет.