Я использую STL string
в своем приложении, и недавно я тестировал его на утечки памяти, и я заметил, что многие мои строки не были должным образом освобождены к концу программы.
Я протестировал следующий код (не дословно) с одной из строк:
const string* cppString = &obj->objString;
const char* cString = cppString->c_str();
delete obj;
После этого я установил точку останова и заметил, что, хотя string
это cppString
указывает на то, что больше не существует, cString
все еще указывал на строку в стиле C, которая, безусловно, была той, которую не удалось освободить в конце.
Я что-то упустил с точки зрениякак работают строки C / C ++?Как я могу получить представление C строки, которая также должна быть освобождена?
РЕДАКТИРОВАТЬ: Еще немного информации.Мой класс obj
имеет тип Dialog
, который наследует Popup
.Я подумал, что это могло быть так, поскольку, когда я удаляю obj
, я воспринимаю это как Popup*
, но я попробовал это в небольшой отдельной программе, и удаление как родительский класс правильно удаляет дочерние переменные-члены(что, конечно, имеет смысл).
Я использовал трассировку утечки памяти в VS, и она показывает, что строка, которая заканчивалась утечкой, была той, которая была создана, когда я сделал Dialog
и установилobjString
на строку, переданную в качестве ссылки на конструктор.
Спасибо,
Jengerer