Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 10
1

Висячие указатели, как с ними бороться

01.05.2015, 20:52. Показов 1915. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, возникла такая проблема.
Есть вектор объектов, в указатель заношу какой либо объект. Но данные из вектора могут удалятся в других местах кода, поэтому указатель ссылается на пустое место. Пытался сам читать про умные указатели, думал что мне подойдет weak_ptr, но я не могу пока сам разобраться как сделать правильно.

C++
1
2
3
4
5
6
7
8
9
vector<dynamic*> dyn;- вектор где хранятся все объекты.
std::weak_ptr<dynamic*> trr;-указатель, берет любой объект из списка.
 
trr=std::make_shared<dynamic*>(dyn.at(i)); так выделяю необходимый объект
 
if(trr.expired())
        {
            Всегда срабатывает, хотя объект добавлен.
        };
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2015, 20:52
Ответы с готовыми решениями:

Как с ними бороться?
в целях безопасности выкладываю фото с текстом

Индексы и как с ними бороться
Добрый день! Написала программу, все файл функции в рабочем состоянии, но когда начала запускать их...

Фризы и как с ними бороться
Информация взята с overclockers.ru, автор 1usmus Позволю себе дополнить причины фризов: 14.1....

ноис символы и как с ними бороться
Здраствуй многоуважаемый all! Есть такая вещь полнотекстовый поиск full-text для него предусмотрен...

6
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
01.05.2015, 21:00 2
gansterm, храни в векторе shared_ptr<dynamic>, вместо dynamic*
0
0 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 10
01.05.2015, 21:16  [ТС] 3
Цитата Сообщение от DrOffset Посмотреть сообщение
gansterm, храни в векторе shared_ptr<dynamic>, вместо dynamic*
А другого способа нет? Придется весь код переписывать.
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
01.05.2015, 21:22 4
Цитата Сообщение от gansterm Посмотреть сообщение
А другого способа нет? Придется весь код переписывать.
Если хочешь использовать weak_ptr, то нет.
Но вообще такие вопросы, как у тебя, должны решаться by design. Т.е. если у тебя код написан так, что в нем возможны висячие указатели и ты не можешь это проконтролировать, то код в любом случае надо переписывать.
1
0 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 10
01.05.2015, 21:35  [ТС] 5
Во, спасибо разобрался. Просто я начинал проект на 2008 студии, и я не профессионал, изучаю все сам.
И еще можно вопрос, как я понял напрямую с weap_ptr данные получить нельзя, надо преобразовывать в shared_ptr, если да то как?
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
01.05.2015, 21:39 6
gansterm, см. функцию lock
0
0 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 10
01.05.2015, 21:40  [ТС] 7
Благодарю за оперативные ответы.
0
01.05.2015, 21:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2015, 21:40
Помогаю со студенческими работами здесь

Что за вирусы и как с ними бороться?
Доброго времени суток. Проблемка, уважаемые, такая. Начал жутко тормозить ноутбук, рушил проверить...

Интерфейсы IDxxxxxxx, как с ними бороться?
1) Нужно ли делать Release интерфейсам и как это устроено на самом деле ? Чего-то не понятно...

Вещественные числа... И как с ними бороться?
Пишу программку на Delphi 7 метод Пуассона. И там необходимо вычислить вещественное число порой в...

Что такое встроенный Object и как с ними бороться?
Хотелось бы почитать что-нить толковое про встроенные объекты в форму и как их можно использовать?...

Лишние и пропадающие символы при записи в файл. Как с ними бороться
Есть пара циклов, за пару часов вдумчигого взгляда ничего не нашел. код: Global Dim Pam(10)...

не понимаю как делать. Динамические масивы, указатели и работа с ними
не понимаю как делать, мне сказали через if, но меня это еще больше запутало, нет идей вообще! в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru