Форум программистов, компьютерный форум, киберфорум
Наши страницы

Удаление объекта из контейнера - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пример с книги не компилируется! http://www.cyberforum.ru/cpp-beginners/thread934571.html
Павловская Т.С. Пример (программа печатает таблицу значений функции г/=х2+1 во введенном диапазоне): #include <stdio.h> int main(){ ...
C++ получить значение пикселя Вопрос довольно стандартный наверное, но поиск в гугле не дал ничего подходящего. Как можно в mfc получить значение пикселя изображения в grayscale? http://www.cyberforum.ru/cpp-beginners/thread934560.html
Хищник-жертва C++
На прямоугольном поле случайным образом размещаются "хищники" и "жертвы", после чего они поочередно делают ходы. Ход жертвы – случайное перемещение на соседнюю клетку, раз в несколько ходов жертва...
Как вытащить значение с enum? C++
У меня перечисленны в enum допустимые типы автомобилей и потом количество мест для каждого из них. Как правильно в классе написать конструктор, который будет по заданомму типу автомобиля брать...
C++ Реализация бинарного дерева поиска http://www.cyberforum.ru/cpp-beginners/thread934510.html
Задача: Реализация бинарного дерева поиска Компилируется нормально, а при запуске выбивает ошибку : "Необработанное исключение по адресу 0x00C83867 в FindBinaryTree.exe: 0xC0000005: нарушение прав...
C++ Вышел за пределы В MVS я первый раз пытаюсь рондомно вывести массив, но выводит ошибку и указывает на цикл, где я там мог выйти за пределы? using namespace std; int main() { srand(time(NULL)); const int... подробнее

Показать сообщение отдельно
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
07.08.2013, 15:05
C++
1
delete this;
в методе класса вполне законно, но дальнейшее использование этого объекта является очень грубой ошибкой.
Цитата Сообщение от fuelcs Посмотреть сообщение
Буду благодарен если кто-то просветит в механизме работы класса (методов класса)
deque::erase вызывает деструктор для объекта на который указывает внутренний указатель. Короче говоря, он уничтожает объект. Не факт, что дек сразу освободит память для этого объекта. Зависит от реализации.
Цитата Сообщение от fuelcs Посмотреть сообщение
Метод запускается как обычная функция? То есть есть точка возврата в функцию, которая его вызвала, без привязки к самому объекту?
В каком смысле? Она работает как обычная функция и никакого отношения к классу объектов, которые хранит, не имеет.
C++
1
2
3
4
5
6
7
8
9
10
void A::B (std::deque<А> &С , unsigned index)
{
...
if (<условие>)
{
     C.erase(C.begin()+index);
//продолжит выполнение здесь
}
...
}
Цитата Сообщение от fuelcs Посмотреть сообщение
Мне почему-то кажется, что указатель this до завершения работы метода должен сохранятся, просто он будет указывать на область памяти которая уже очищена...
он будет указывать бог знает на что. после delete this(деструктор + освобождение памяти) его нельзя использовать, после deque::erase(деструктор + (не факт) освобождение памяти) использовать нельзя. если во втором случае не будет освобождение памяти, то this, вероятно, будет указывать на соседний (существующий или не существующий) объект
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru