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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Пример с книги не компилируется! http://www.cyberforum.ru/cpp-beginners/thread934571.html
Павловская Т.С. Пример (программа печатает таблицу значений функции г/=х2+1 во введенном диапазоне): #include <stdio.h> int main(){ float Xn, Xk, Dx; printf("Введите диапазон и шаг изменения аргумента: " ); scanf("%f%f%f", &Хn, &Хk, &Dx);
C++ получить значение пикселя Вопрос довольно стандартный наверное, но поиск в гугле не дал ничего подходящего. Как можно в mfc получить значение пикселя изображения в grayscale? http://www.cyberforum.ru/cpp-beginners/thread934560.html
Хищник-жертва C++
На прямоугольном поле случайным образом размещаются "хищники" и "жертвы", после чего они поочередно делают ходы. Ход жертвы – случайное перемещение на соседнюю клетку, раз в несколько ходов жертва порождает еще одну жертву на соседней клетке. Ход хищника – уничтожение жертвы на соседней клетке, если это возможно, иначе –случайное перемещение на соседнюю клетку. Уничтожив несколько жертв, хищник...
Как вытащить значение с enum? C++
У меня перечисленны в enum допустимые типы автомобилей и потом количество мест для каждого из них. Как правильно в классе написать конструктор, который будет по заданомму типу автомобиля брать количество мест для посадки? enum CarType { Car_Gaz, Car_Limo, Car_Jip, Car_Audi8, Car_Oka, Car_MAX,
C++ Реализация бинарного дерева поиска http://www.cyberforum.ru/cpp-beginners/thread934510.html
Задача: Реализация бинарного дерева поиска Компилируется нормально, а при запуске выбивает ошибку : "Необработанное исключение по адресу 0x00C83867 в FindBinaryTree.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCDCD." Помогите пожалуйста, занялся изучением алгоритмов и структур данных просто #include <iostream> using namespace std; struct Node {
C++ Вышел за пределы В MVS я первый раз пытаюсь рондомно вывести массив, но выводит ошибку и указывает на цикл, где я там мог выйти за пределы? using namespace std; int main() { srand(time(NULL)); const int n=10; int M; for (int i=0; i<n; i++) { подробнее

Показать сообщение отдельно
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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, вероятно, будет указывать на соседний (существующий или не существующий) объект
 
Текущее время: 22:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru