Название: Как правельно удалить QString Отправлено: loewa от Январь 26, 2006, 13:55 Точнее память выделеную под строку
что только не делаю выделять выделяет а отдавать не хочет str=""; delete str; /-------------/ str="" str.squeeze(); непонимаю я :( linux, Qt 3 Название: Как правельно удалить QString Отправлено: Steven_Orko от Январь 26, 2006, 14:06 Цитировать str=""; delete str; Непонятно... Вот если бы ты Код:
Тогда яснее было бы. А зачем тебе это? Тебе жалко пару байтиков? ))) :D Название: Как правельно удалить QString Отправлено: zlatko от Январь 26, 2006, 14:10 QString сам заботится об виделении(читай освобождении) памяти, а вобше согласен с Steven_Orko, вопрос поставлен некоректно и непонятно.
Название: Как правельно удалить QString Отправлено: loewa от Январь 26, 2006, 14:25 Код:
и так делаю. и у меня не пару байтиков а 200кb и жалко мне их. Я вызываю кллас (в нём эта переменная ) каждую минуту в первй раз он выделяет память и не очищает а последующие разы невыделяет видимо пользует ранее выделеную Название: Как правельно удалить QString Отправлено: Steven_Orko от Январь 26, 2006, 14:47 Ну во-первых, класс QString, как было написано zlatko, сам заботится о том, сколько и когда памяти выделить под хранение данных и сколько освободить. Сам класс реализован по схеме "конверт-письмо" и в нем реализован специальный механизм по подсчету ссылок (Впрочем, так можно сказать о многих Qt-классах). Метод реализации направлен на оптимальную работу с памятью в любом месте, где используется экземпляр данного класса(имеется ввиду скорость, объем, размещение и т.д.). Подробнее об этом ты можешь почитать в книге Дж. Коплиена "Программирование на С++" серии "CS". Если у тебя расшарено около 200Кб, значит столько нужно для оптимального размещения твоих данных и последующей работы с ними. Как ты определяешь, сколько места в памяти занимает данный объект?
По поводу QString, кажется, все. Этот вопрос может быть актуален для классов STL или аналогичных им Qt-классов. Для решения тобою затронутой проблеммы необходимо использовать swap(), который меняет содержимое, как можно догадаться. Создаешь новый, допустим, вектор и меняешь его содержимое со старым разросшимся в памяти вектором. Название: Как правельно удалить QString Отправлено: BaltikS от Январь 26, 2006, 15:05 Да и строку следует обнулять не так...
Код: str = QString::null; Название: Как правельно удалить QString Отправлено: Rainbow от Январь 26, 2006, 15:43 Как у автора тоже годится.
Название: Как правельно удалить QString Отправлено: Steven_Orko от Январь 26, 2006, 15:57 Цитата: "Rainbow" Как у автора тоже годится. :wink: Код: QString().isNull(); // returns true Название: Как правельно удалить QString Отправлено: BaltikS от Январь 26, 2006, 16:03 Абсолютно верно!!!
NULL != "" Название: Как правельно удалить QString Отправлено: nEoN от Январь 26, 2006, 17:11 Цитата: "BaltikS" Да и строку следует обнулять не так... Код: str = QString::null; А лучше так : Код: str.clear(); Название: Как правельно удалить QString Отправлено: BaltikS от Январь 26, 2006, 17:32 nEoN, а почему так лучше? По-моему то же самое...
Название: Как правельно удалить QString Отправлено: Steven_Orko от Январь 26, 2006, 17:38 Цитата: "BaltikS" nEoN , а почему так лучше? По-моему то же самое... Действительно, почему так лучше? Название: Как правельно удалить QString Отправлено: Dendy от Январь 26, 2006, 19:34 Дружно читаем статью Троллей, посвящённую портированию Qt3 -> Qt4.
Сделать строку пустой: Код: string.clear(); Сделать строку нулевой: Код: string = QString(); Больше никаких QString::null, он оставлен просто для совместимости. Название: Как правельно удалить QString Отправлено: nEoN от Январь 26, 2006, 19:52 Цитата: "Steven_Orko" Цитата: "BaltikS" nEoN , а почему так лучше? По-моему то же самое... Действительно, почему так лучше? Потомучто clear() это стандартная фукция и предназначена именно для очистки строки. Вот её внутренности в Qt 4.1 Код: // Qt\4.1.0\src\corelib\tools\qstring.h добавлено спустя 2 минуты: Причём после clear() строка становится и пустой (isEmpty) и нулевой (isNull) Название: Как правельно удалить QString Отправлено: Dendy от Январь 27, 2006, 10:33 Даааа... действительно, тупанул я :D Тролли предлагают не различать пустую и нулевую строку и пользоваться всегда QString::isEmpty(). ИМХО, несогласен, нулевая строка и пустая - разньІе вещи. Нулевой обьект - вообще универсальньІй механизм для получения данньІх. Например:
Код: QString str = findSomeString(); |