![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
boriska98 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.12.2012 Репутация: нет Всего: нет |
здравствуйте: есть класс Track в не-GUI потоке создаются экземпляры (несколько сотен) данного класса, посредством указателей(хранятся в векторе) : Track *t = new Track; В процессе работы программы указатели копируются, причем предущий указатель на объект зануляется- примерно так: Track *oldpointer; ...; newpointer=oldpointer; oldpointer=0; Таким образом, в процессе работы программы существует лишь единственный указатель на объект. Также в процессе работы поля экземпляров класса Track модифицируются в рез-те вычислений и т.п. Теперь встала необходимость визуализации расчетов. Как получить доступ к полям объекта из другого класса в gui-потоке? Если это реализовать передавая указатель, то при возникновении необходимости удалить объект, память не освободится, т.к. существует более одного указателя на объект. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Да хоть сто указателей, память освободится при первом-же уничтожении объекта. Что, кстати в вашем случае не есть хорошо. Поэтому, возможно вам нужно использовать умные указатели. Добавлено через 4 минуты и 32 секунды При этом все остальные указатели станут не валидными. |
|||
|
||||
boriska98 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.12.2012 Репутация: нет Всего: нет |
завел в полях класса счетчик ссылок, и удаляю откуда мне удобно. все работает. кто-нибудь знает более грамотное решение? |
|||
|
||||
shuttle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.4.2008 Репутация: нет Всего: нет |
Как уже было сказано во втором посте, используй smart pointer-ы
--------------------
|
|||
|
||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
насколько я понимаю, аналогичное поведение имеет auto_ptr А вот механизмом подсчёта ссылок обладают shared_ptr http://cplusplus.com/reference/memory/shared_ptr/ Это сообщение отредактировал(а) NoviceF - 28.12.2012, 22:38 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Только обязательно надо добавить, что из-за этого auto_ptr очень опасная штука и не рекомендуется к использованию. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |