Форум программистов, компьютерный форум CyberForum.ru

Проблема с указателем на элемент вектора - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Способы затолкать OpenCL и C++ в один файл http://www.cyberforum.ru/cpp-beginners/thread1499323.html
Я лично пробовал способы затолкать OpenCL в C++ файл одним нетривиальным способом: использовать трюк с #ifdef чтобы компиляторы не конфликтовали и не выдавали друг другу ошибку. Так можно было использовать общие функции. Однако приходилось включать определенные флаги при компиляции OpenCL. Скоро выйдет OpenCL 2.1, правда не известно будет ли нативный способ затолкать OpenCL в C++ файл. Если да,...
C++ Какие независимые друг от друга изменения позволят коду отработать корректно? Какие независимые друг от друга изменения позволят коду отработать корректно: class Сountеr { public: // 1 void Count(); // 2 }; int main() { Сountеr obj; http://www.cyberforum.ru/cpp-beginners/thread1499313.html
C++ Перегрузка операций
Цитата из Р. Лафоре "Объекто-ориентированное программирование в C++": Объект, стоящий с левой стороны операции ... вызывает функцию оператора. Объект, стоящий справа от знака операции, должен быть передан в функцию в качестве аргумента. Далее идет пример: #include <iostream> using namespace std; //---------------------------------------------------------------------------//...
Сортировка массива c++ std :: sort() C++
Дан двумерный массив символов char M, надо отсортировать его при помощи std :: sort(), построчно, т.е. допустим было 00011 11111 00000 00000 11111 А стало 00000 00000 00011
C++ Как отправить почту через Telnet? http://www.cyberforum.ru/cpp-beginners/thread1499247.html
Не получается оправка почты через telnet. Пробую mail, yandex не работает. Возможно ли отправить?
C++ Запомнить, какое число меньше 437, записать его в переменную и больше не изменять. Найти ошибку Добрый день, решал задачу, нужно было сделать так, чтобы программа запомнила, какое число меньше 437 и записала его в переменную number, а также, чтобы потом уже не перезаписывала его, но почему то данные в функцию посылаются некорректно, где допущена ошибка? Код: #include <iostream> using namespace std; int check(int a, int b) { подробнее

Показать сообщение отдельно
DrOffset
6416 / 3790 / 876
Регистрация: 30.01.2014
Сообщений: 6,575
16.07.2015, 10:57     Проблема с указателем на элемент вектора
Цитата Сообщение от Fobes Посмотреть сообщение
Я верно мыслю или все же так лучше не делать ?
Ну в целом да, это как раз реализации идеи о фиктивном удалении и назначении элемента невалидным.
Только вот есть два момента. Если мы удаляем из вектора, например из середины, то адреса следующих за удаленным объектов изменятся. Если у тебя на них были подвязаны узлы, то будет ой.
Во-вторых правильно так:
C++
1
2
3
4
5
TWire::~TWire()
{
    delete firstNode;
    delete lastNode;
}
Сразу два удалить за раз нельзя
____
Поэтому, если хочешь остановиться на варианте с фиктивным удалением, то вектор уже трогать нельзя. Просто помечай элемент как удаленный, но не удаляй его по-настоящему. Либо вектор заменяй на другой контейнер, где элементы хранятся не единым блоком. Например на list. Тогда удаление одного элемента не будет влиять на другие.

Добавлено через 7 минут
Цитата Сообщение от Fobes Посмотреть сообщение
. Указатель в векторе ведь в автоматической памяти и они удалятся вместе с вектором, а память останется во владении указателя класса В.
Или у тебя в векторе уже не сами объекты лежат, а указатели на них?
Короче. Давай код что-ли, более-менее цельный. Тогда и видно будет правильно там или нет. А то гадание какое-то
 
Текущее время: 06:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru