LINUX.ORG.RU

c++ правильная очистка памяти


0

2

Допустим есть структура, в которой лежат указатели на другие объекты, обычные переменные типа int, есть там QString. еще вектор, массив и много всячины еще. Как без замораживания очистить память этой структуры, например

.......................
class MyMegaStructure
{
public:
   int i;
   float j;
   vector <structure1*> structs;
   QString str;
   QStringList sl;
   int ar[128];
   structure2* ar2[256];

.......................

};

MyMegaStructure *strc = new MyMegaStructure();
strc->Load();
.......................
.......................
delete strc; //как очистить память, тут около 100 мб, но они не 
очищаются
сорри за ламерство, раньше как-то не замечал такой мощнейшей утечки

Ответ на: комментарий от pozitiffcat

можноли сделать разименование не с помощью точки, а по -> а то мне придется копать 15 тыс строк кода %)

void otherFunction()
 {
     QSharedPointer<MyObject> obj =
         QSharedPointer<MyObject>(new MyObject, doDeleteLater);

     // continue using obj
     obj.clear();    // calls obj->deleteLater();
 }
pozitiffcat ★★★
() автор топика
Ответ на: комментарий от pozitiffcat

Ну и удаляй, как выше сказали. Код деструктора можешь показать?

Почему бы не хранить данные в контейнерах по значению?

JackyTreehorn
()
Ответ на: комментарий от pozitiffcat

Да ты прикинь весь док изучить, да я охренею! Ты сам то его весь знаешь?


Весь - нет, конечно же. Но блин, раз уж я указал на умные указатели, то можно было бы поглядеть, что там в доке пишут.

anonymous
()
Ответ на: комментарий от pozitiffcat

>именно так я делал

Может у тебя наследование где есть, а про виртуальные деструкторы ты забыл?

staseg ★★★★★
()

>MyMegaStructure *strc = new MyMegaStructure(); // а здесь вы ещё стираете? А мы уже рубим!

strc->Load();

nikitos ★★★
()
Ответ на: комментарий от staseg

Всегда делайте деструкторы базовых классов либо виртуальными и открытыми, либо невиртуальными и защищенными.
Sutter H.

anonymous
()

А может, дело в фрагментации?

Absurd ★★★
()

80% в треде упоротые наглухо, ТС - содомит-мастермайнд

shty ★★★★★
()

Мужики по поводу QSharedPointer например есть у меня старая переменная которая щас используется во всю, в моей программе напр pointer*. что если я сделаю так

my = QSharedPointer<myClass>(new myClass);
pointer = (myClass*)my.data();

так будет круто? Просто и поинтер будет shared, и пол программы править не придется мне, я по старинке буду использовать старый указатель.. как высчитаете, не плохо так будет?

pozitiffcat ★★★
() автор топика

Допустим есть структура [..]

class MyMegaStructure

OMFG!!! чувак, программирование - это не то же самое что во дворе твоей школы через верёвочку прыгать

есть структура, в которой лежат указатели на другие объекты, обычные переменные типа int, есть там QString. еще вектор, массив и много всячины еще

отличный «дезайн», я считаю

Как без замораживания очистить память [..]

без «замораживания»?

shty ★★★★★
()
Ответ на: комментарий от staseg

не знаю, кто такой Саттер

один чувак из комитета по стандартизации, написал книжки Exceptional C++, More Exceptional C++ и Exceptional C++ Style, в которых рассматиривает различные тёмные углы языка, заботливо предусмотренные комитеттом.

Begemoth ★★★★★
()
Ответ на: комментарий от panter_dsd

вот вы пипец все тут умники! давайте я тоже в каждом топике буду оставлять бестолковые комменты! Может вы сами не знаете просто, зато выставляете себя пипец умниками, так только школьные ботаники делают ))))

pozitiffcat ★★★
() автор топика
Ответ на: комментарий от pozitiffcat

Тебе уже несколько раз сказали, что нужно делать.

Как по мне, так тебе нужно сначала с++ изучить, так как твои знания практически равны нулю, а потом уже лезть на форум со своими тупыми вопросами и ламерским гонором.

Язабан.

panter_dsd ★★★★
()
Ответ на: комментарий от pozitiffcat

Мужики по поводу моей ситуации например есть у меня старая больная нога которая щас используется во всю. что если я отпилю ее себе бензопилой, так будет круто? Просто будет протез на пол ноги, и всю ногу лечить не придется мне, я по старинке буду использовать верхнюю часть этой ноги.. как высчитаете, не плохо так будет?

anonymous
()
Ответ на: комментарий от yoghurt

тебе нужны boost::shared_ptrы

Абстрактно, лучше ptr_vector.

Reaper ★★
()
Ответ на: комментарий от pozitiffcat

>вот вы пипец все тут умники!

Тебе уже сказали, что в приведенном тобой коде все нормально. Даже несколько догадок сделали. Бери валгринд и изучай, что и где у тебя теряется.

staseg ★★★★★
()
Ответ на: комментарий от pozitiffcat

> зачем тогда вообще ЛОР?

Послыть тебя. Читать книжки.

К.О.

LamerOk ★★★★★
()
Ответ на: комментарий от panter_dsd

если что, то пол года уже целый город сидит на моей программе. Сеть продовольственных магазинов. Программа растет, поэтому я советуюсь с вами как лучше сделать, познаний c++ достаточно, но не каждый знает то что знает другой, согласитесь...

pozitiffcat ★★★
() автор топика
Ответ на: комментарий от pozitiffcat

Бедный город...

Познаний с++ никаких. Твой код говорит о том, что ты пишешь на си, а это немного разные вещи.

panter_dsd ★★★★
()
Ответ на: комментарий от Begemoth

На самом деле он есть, просто я почему-то был уверен, что std::tr1::* появился в 4.3

yoghurt ★★★★★
()
Ответ на: комментарий от pozitiffcat

Быдлокодеры атакуют, человечество опасносте.

Программа растет

Пока что тут растёт только твоя жирнота. Тебе уже 100500 раз сказали, что надо делать и что читать. Также не возбраняется подумать головой.

geekless ★★
()
Ответ на: комментарий от geekless

я на 100 % уверен тут 99 % быдлокодеры... мега супер пупер профи, на ЛОРе не сидят, ну возможно кроме модеров... хотя я заметил модеры не троллят, а подсказывают

pozitiffcat ★★★
() автор топика
Ответ на: комментарий от pozitiffcat

чхорт, я там в аспире училсо, бедный тотти -_-

anonymous
()
Ответ на: комментарий от pozitiffcat

> я на 100 % уверен тут 99 % быдлокодеры...

Ты, должно быть, уверен еще и в том, что ты программист?

Ну так мы увидим сегодня твой деструктор класса и информацию о предпринятых действиях по отладке программы, или ты так и будешь дальше тренировать свою уверенность и нашу телепатию?

мега супер пупер профи, на ЛОРе не сидят, ну возможно кроме модеров...

Лолчто.

geekless ★★
()
Ответ на: комментарий от geekless

ты знаешь что такое fastCube ох боже неееет? вот фак ! это же компонент Дэлфи!! неее ты не программист!!

pozitiffcat ★★★
() автор топика
Ответ на: комментарий от geekless

деструктор вы не увидите его давно нет, как следствие моих экспериментов. Но он был таков, что в цикле удалял оператором delete элементы массивов и т.п.

pozitiffcat ★★★
() автор топика
Ответ на: комментарий от aho

Боюсь, если они зайдут в этот топик, то единственное, что будет напоминать C++ это жававский банхаммер.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.