|
17 / 17 / 5
Регистрация: 19.09.2012
Сообщений: 216
|
||||||||||||||||
Проблема с указателем на элемент вектора15.07.2015, 16:38. Показов 3583. Ответов 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
Список с указателем на последний элемент Заменить элементы вектора, равные максимальному, на последний элемент вектора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
|
После бана на Пикабу не работает авторизация аккаунта с Яндекса.
Hrethgir 09.07.2026
В частности https:/ / auto. ru/ logbook/ zapret-na-vozhdenie-posle-65-let_1cf28789-07b4-4c75-a2f7-4cd4edf9deeb тут хотел оставить комментарий такой
Зрите в корень - монополизация на разработку программ. . .
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
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 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|