|
17 / 17 / 5
Регистрация: 19.09.2012
Сообщений: 216
|
||||||||||||||||
Проблема с указателем на элемент вектора15.07.2015, 16:38. Показов 3573. Ответов 54
Метки нет (Все метки)
Всем доброго времени суток. Не могу никак выкрутиться)
Допустим, у нас есть класс "А" с параметрами:
TNode:
0
|
||||||||||||||||
| 15.07.2015, 16:38 | |
|
Ответы с готовыми решениями:
54
Как правильно обратиться к элементам полиморфного вектора (с умным указателем)? Проблема с указателем на функцию Проблема с указателем мыши |
|
17 / 17 / 5
Регистрация: 19.09.2012
Сообщений: 216
|
|
| 16.07.2015, 00:44 [ТС] | |
|
Avazart, на счет не валидности хороший вариант)) такой вопрос. Указатель ведь является объектом автоматической памяти ? т.е. очистить память выделенную в одном месте можно через тот же указатель но в другом класса ?
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||
| 16.07.2015, 01:17 | ||||||||
|
Добавлено через 13 минут
Но вариант я уведомлением все-таки лучше. Архитектурно.
2
|
||||||||
|
Комп_Оратор)
|
|||
| 16.07.2015, 07:16 | |||
|
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 16.07.2015, 08:17 | ||
|
0
|
||
|
Комп_Оратор)
|
||
| 16.07.2015, 09:01 | ||
|
Они - в векторе класса A и еще такие же где-то ещё (в классе B) указывают на одну и ту же память. После очистки памяти через вектор к ней нельзя не обратиться ни проверить возможность доступа из класса В. Это нормально. Поэтому я и говорю, что указатель нельзя чистить где ни попадя. Хотя если отдавать его куда ни попадя, то всегда есть искушение.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 16.07.2015, 09:12 | ||
|
1
|
||
|
Комп_Оратор)
|
|||
| 16.07.2015, 09:38 | |||
|
Надо же тоже delete, чтобы и при обращении через вектор из A всё крэшилось. Тогда может понятней будет?
0
|
|||
|
17 / 17 / 5
Регистрация: 19.09.2012
Сообщений: 216
|
|||||||||||||||||||||
| 16.07.2015, 10:40 [ТС] | |||||||||||||||||||||
|
IGPIGP, DrOffset, сорри, вчера уснул )) Выкрутился в общем, правда не знаю к чему это сейчас приведет, на мой взгляд все должно работать нормально. Растолкуйте, умные люди плиз)
к классу TNode добавил 2 поля:
При удалении об А деструктор стал выглядеть так:
0
|
|||||||||||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||
| 16.07.2015, 10:57 | ||||||||
|
Только вот есть два момента. Если мы удаляем из вектора, например из середины, то адреса следующих за удаленным объектов изменятся. Если у тебя на них были подвязаны узлы, то будет ой. Во-вторых правильно так:
![]() ____ Поэтому, если хочешь остановиться на варианте с фиктивным удалением, то вектор уже трогать нельзя. Просто помечай элемент как удаленный, но не удаляй его по-настоящему. Либо вектор заменяй на другой контейнер, где элементы хранятся не единым блоком. Например на list. Тогда удаление одного элемента не будет влиять на другие. Добавлено через 7 минут Короче. Давай код что-ли, более-менее цельный. Тогда и видно будет правильно там или нет. А то гадание какое-то
1
|
||||||||
|
17 / 17 / 5
Регистрация: 19.09.2012
Сообщений: 216
|
||||||
| 16.07.2015, 11:01 [ТС] | ||||||
|
DrOffset, так я же написал в первом посте) В классе А у нас вектор указателей
0
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 16.07.2015, 11:02 | ||
|
Fobes, И да, вариант с умными указателями (выше пост) будет работать. Он хуже, чем некоторые другие варианты, требующие изменения архитектуры, но работать он будет.
Добавлено через 1 минуту
0
|
||
|
17 / 17 / 5
Регистрация: 19.09.2012
Сообщений: 216
|
|
| 16.07.2015, 11:04 [ТС] | |
|
DrOffset, окай, с удалением учту, всем спасибо большое. Вопрос решен. ^_^
0
|
|
|
|
||||||
| 16.07.2015, 14:15 | ||||||
|
Если наброском как-то так:
1
|
||||||
|
Комп_Оратор)
|
||
| 16.07.2015, 14:31 | ||
![]() Тут надо указатель оборачивать чем-то, но тогда уж лучше смарт использовать какой-то. Или сделать один класс полем другого и обращаться по указателю только через владельца. В идеале вообще не давать указатель наружу.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 16.07.2015, 16:03 | |||
![]()
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 16.07.2015, 16:23 | ||
|
В этом выражении после конструирования переменной spt, у нее будет вызван operator bool(), ну и соответственно произведена проверка.
0
|
||
| 16.07.2015, 16:26 | ||||||
|
Не по теме: Значит стайл ...
0
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 16.07.2015, 16:34 | |
|
Добавлено через 7 минут Не по теме: Avazart, ты путаешь. Мой код и твой - разные. Тут где-то на форуме проскакивал вопрос из книги Страуструпа с таким же кодом. Суть этого в том, чтобы объявлять переменные там, где они используются и сразу инициализировать их. В данном случае spt имеет смысл только внутри if и его область видимости ограничена скобками if. Это чисто С++сный подход. В этом случае = - это не присваивание, а инициализация. Т.е. здесь работает конструктор. Поэтому этот код не вызовет у компилятора никаких предупреждений.
0
|
|
| 16.07.2015, 16:34 | |
|
Не по теме: Че не понятно... плохая практика в условиях использовать присваивание, плохо читается = / == .
0
|
|
| 16.07.2015, 16:34 | |
|
Проблема с указателем на строку Проблема с умным указателем std::unique_ptr
Список с указателем на последний элемент Заменить элементы вектора, равные максимальному, на последний элемент вектора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|