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 мб, но они не 
очищаются
сорри за ламерство, раньше как-то не замечал такой мощнейшей утечки

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

1. «ответить на вопрос» - для ТС в его текущем положении любой ответ на вопросы которые он задал вреден, ему надо начинать с азов, кроме того ответ без -lastral не соберётся
2. «промолчать» - откуда тогда ТС узнает что он упоротый? ведь будет сидеть и думать что всё тип-топ

//ничего личного

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

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

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

Какого хрена ты ему в няньки набиваешься? Денег он тебе все равно не заплатит. Единственная причина для таких выступлений - потешить ЧСВ.

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

преподавательский инстинкт :) может не сейчас, так хоть потом до него дойдёт

а ЧСВ повышать... ну, как-то глупо это делать таким образом, это всё равно как в детский сад ходить и там с детьми драться, ощущая себя могучим и непобедимым :)

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

я уже все сделал, без ваших тупизновых ответов. Ни один не помог. Заново написал все деструкторы [..]

:lol: двоечник, тебе в первом же ответе сказали деструктор написать

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

научитесь сначала слова согласовывать, а потом мы с Вами поговорим об аллегориях и трактовании смысла

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

мне на это так насрать, я думаю ты уже заметил. Я кстати тему отметил решенной, тут больше нечего делать....

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

мне на это так насрать, я думаю ты уже заметил

да, я это ещё по Вашему коду заметил

Я кстати тему отметил решенной, тут больше нечего делать....

ну Вот и не делайте, а то взаимоисключающие параграфы у Вас

shty ★★★★★
()

а можно таки хоть название программы узнать?

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

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

Если это не троллинг, тогда я даже и не знаю, что называть троллингом.

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

Ты либо мать Тереза, либо боишься себе в этом признаться

замечание по синтаксису: это могут быть и совместные события, конструкция вида «либо ..., либо ...» не катит :)

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

она далеко не идет, из-за static int once = 0;

Блин. А я почему-то думал, что когда исполнение дойдет до этой строчки, то будет обязательно присвоение переменной нулю. Хотя сам никогда не пользовался static переменными.

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

> А я почему-то думал, что когда исполнение дойдет до этой строчки, то будет обязательно присвоение переменной нулю.

Сарказм?

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

Сарказм?

Нет, дорогой мой анонимус, это не сарказм. Я только, что проверил. Рекурсия там не возникает, static переменная не инициализируется в теле функции.

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

Рекурсия там не возникает

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

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

anonymous>Возникает, просто не глубокая, и уж точно не «бесконечная», как ты, если верить твоим словам, думал.

статик инитится тока 1 раз

Да понял я, понял.

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

если инициализирующее выражение известно на этапе компиляции то да никакой инициализации внутри функции нет а если неизвестно то внутри функции и инициализируется при первом проходе и устанавливает флажок скрытый но тогда получится говнокод не совместимый с многопоточностью придется юзать boost::once или подобные костыли если сильно лень протаскивать ссылку на объект куда то далеко далеко только чтоб объект не умирал при возвращении то можно там далеко далеко влепить static и привязать к нему костыль boost::once он гарантирует корректную инициализацию при одновременной попытке двух потоков инициализировать объект

anonymous
()
Ответ на: комментарий от pathfinder
#include <boost/thread/once.hpp>

static boost::once_flag once_res = BOOST_ONCE_INIT;

struct func_res
{
	std::string *&r;
	func_res(std::string *&r):r(r){}
	void operator()()
	{
		static string s("guarded init");
		r = &s;
	}
};

void reentrant_subroutine()
{
	static string *s;
	boost::call_once(once_res, func_res(s));
	/* 's' can be safety used */
}

оно корректно работает но имхо посмотриш на такое говно так и хочется или сделать ее глобальной с инициализацией до входа в main или все таки протаскивать через несколько уровней

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

что делать если исключение у инициализируемого объекта в конструкторе ? а за спиной куча потоков ждут пока ты завершиш инициализацию и их разблокируют если прибить их и себя то в каком состоянии останется объект once_flag ? мы же по сути не вернемся из процедуры инициализации костыль на костыле вообщем тут и правда лучше такой ресурс захватить до входа в main нет так нет все просто и понятно

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