LINUX.ORG.RU

получить доступ к объекту

 


0

1

здравствуйте, пишу на C++ программу:

есть класс Track

в не-GUI потоке создаются экземпляры (несколько сотен) данного класса, посредством указателей(хранятся в векторе) :

Track *t = new Track;

В процессе работы программы указатели копируются, причем предущий указатель на объект зануляется- примерно так:

Track *oldpointer; ...; newpointer=oldpointer; oldpointer=0;

Таким образом, в процессе работы программы существует лишь единственный указатель на объект. Также в процессе работы поля экземпляров класса Track модифицируются в рез-те вычислений и т.п.

Теперь встала необходимость визуализации расчетов. Как получить доступ к полям объекта из другого класса в gui-потоке?

Если это реализовать передавая указатель, то при возникновении необходимости удалить объект, память не освободится, т.к. существует более одного указателя на объект.


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

KivApple ★★★★★
()

Для начала выкинь свои велосипеды на указателях и воспользуйся unique_ptr. Если нет нового стандарта - возьми хотя бы boost::scope_ptr.

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

Ну так объект и не должен удаляться, пока его GUI рисует. Вот >когда отрисует, можно указатель тоже занулить и объект >уничтожится.

А как дать знать gui-классу, что пора «зануляться» ?

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

<Для начала выкинь свои велосипеды на указателях и <воспользуйся unique_ptr. Если нет нового стандарта - возьми <хотя бы boost::scope_ptr. Большая разница? Как получить доступ к полям из gui-класса?

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

А разве у тебя нет чего-то вроде подсчёта ссылок? Тогда бы GUI-класс просто занулил бы указатель когда сочтёт это нужным и если объект больше никому не будет нужным, он освободится.

KivApple ★★★★★
()

Ваша проблема лежит в области:

В процессе работы программы указатели копируются, причем предущий указатель на объект зануляется- примерно так:
Track *oldpointer; ...; newpointer=oldpointer; oldpointer=0;

Зачем так сделано - не понятно.

Потоки и GUI тут вообще ни при чем.

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

он тебе немного не правильно подсказал. тебе нужен shared_ptr. когда гуи нужен класс он берёт не указатель, а shared_ptr делает с ним всё что захочет, а потом выкидывает. это что-то вроде очень примитивного уборщика мусора.

Как получить доступ к полям из gui-класса?

оператором -> ?

либо ты полный нуб в этой игре нифига не шаришь в спп, либо я тебя не сильно понял.

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

А разве у тебя нет чего-то вроде подсчёта ссылок? Тогда бы >GUI-класс просто занулил бы указатель когда сочтёт это нужным >и если объект больше никому не будет нужным, он освободится.

спасибо, завел в полях класса счетчик и удаляю объекты из gui-потока. все работает

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

Зачем так сделано - не понятно

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

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

оператором ->

а ну да )), имел в виду , чтобы не вылетали ошиби памяти

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