Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить доступ к объекту 
:(
    Опции темы
boriska98
Дата 28.12.2012, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 28.12.2012

Репутация: нет
Всего: нет





здравствуйте:

есть класс Track

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

Track *t = new Track;

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

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

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

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

Если это реализовать передавая указатель, то при возникновении необходимости удалить объект, память не освободится, т.к. существует более одного указателя на объект.
PM MAIL   Вверх
volatile
Дата 28.12.2012, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(boriska98 @  28.12.2012,  17:57 Найти цитируемый пост)
память не освободится, т.к. существует более одного указателя на объект. 

Да хоть сто указателей, память освободится при первом-же уничтожении объекта.
Что, кстати в вашем случае не есть хорошо.
Поэтому, возможно вам нужно использовать умные указатели.

Добавлено через 4 минуты и 32 секунды
Цитата(volatile @  28.12.2012,  18:25 Найти цитируемый пост)
при первом-же уничтожении объекта.

При этом все остальные указатели станут не валидными.

PM MAIL   Вверх
boriska98
Дата 28.12.2012, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 28.12.2012

Репутация: нет
Всего: нет



Цитата(volatile @ 28.12.2012,  18:25)
Цитата(boriska98 @  28.12.2012,  17:57 Найти цитируемый пост)
память не освободится, т.к. существует более одного указателя на объект. 

Да хоть сто указателей, память освободится при первом-же уничтожении объекта.
Что, кстати в вашем случае не есть хорошо.
Поэтому, возможно вам нужно использовать умные указатели.

Добавлено @ 18:30
Цитата(volatile @  28.12.2012,  18:25 Найти цитируемый пост)
при первом-же уничтожении объекта.

При этом все остальные указатели станут не валидными.

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

кто-нибудь знает более грамотное решение?
PM MAIL   Вверх
shuttle
Дата 28.12.2012, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



Как уже было сказано во втором посте, используй smart pointer-ы
--------------------
PM MAIL   Вверх
NoviceF
Дата 28.12.2012, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



Цитата(boriska98 @  28.12.2012,  18:57 Найти цитируемый пост)
В процессе работы программы указатели копируются, причем предущий указатель на объект зануляется


насколько я понимаю, аналогичное поведение имеет auto_ptr

А вот механизмом подсчёта ссылок обладают shared_ptr
http://cplusplus.com/reference/memory/shared_ptr/

Это сообщение отредактировал(а) NoviceF - 28.12.2012, 22:38
PM MAIL   Вверх
bsa
Дата 29.12.2012, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(NoviceF @  28.12.2012,  23:37 Найти цитируемый пост)
насколько я понимаю, аналогичное поведение имеет auto_ptr

Только обязательно надо добавить, что из-за этого auto_ptr очень опасная штука и не рекомендуется к использованию.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0688 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.