0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
||||||
1 | ||||||
Операция delete в векторе11.07.2014, 18:38. Показов 1523. Ответов 14
Метки нет (Все метки)
Привет, друзья, делаю маленькую игрушку, там у меня постоянно появляются и уничтожаются новые объекты, и я заметил такую вещь: со временем игра начинает галить, хотя количество объектов одновременно существующих на экране не становится больше. Что это может быть? Единственное, что приходит в голову - то, что память на самом деле не освобождается после уничтожения объекта, значит я неправильно организовал функцию удаления объекта из вектора?
0
|
11.07.2014, 18:38 | |
Ответы с готовыми решениями:
14
Недопустимая операция при выполнении оператора delete[] Операция delete вызывает ошибку Access violation at address Операция ON DELETE PostgresSQL + Hibernate (many-to-many, annotation) - операция delete |
130 / 70 / 25
Регистрация: 20.03.2014
Сообщений: 261
|
|
11.07.2014, 18:51 | 2 |
В этом методе не вижу проблем, возможно у Вас утечки в самом объекте на который указывает указатель, возможно Вы не всё подчищаете в деструкторе этого объекта.
1
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
11.07.2014, 18:58 | 3 |
Для начала заменить vector<T*> на vector<std::unique_ptr<T> >, а вместо DeleteElement использовать векторный erase.
2
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
||||||
11.07.2014, 22:23 [ТС] | 4 | |||||
Горелый, честно говоря, я еще не разобрался с деструкторами - они у меня пустые..... Подскажи, что написать в деструкторе, например, такого класса:
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
12.07.2014, 03:10 | 5 |
1
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
||||||
12.07.2014, 06:13 [ТС] | 6 | |||||
DrOffset,
0
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
|
12.07.2014, 06:54 | 7 |
1
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
13.07.2014, 15:33 | 9 |
Антон219, а MakeRect что делает?
Короче тут правило-то простое, если ты в конструкторе захватил какой-то ресурс, то в деструкторе он освобождается. Это происходит либо автоматически, если ресурс - это тоже какой-то класс со своим деструктором. Либо придется вызвать какую-то функцию, освобождения (из деструктора). Так что теперь смотри что ты делаешь в конструкторах, есть ли там такие ресурсы, которые требуют освобождения и нужно ли его делать вручную, и в зависимости от этого пишешь или не пишешь деструктор.
1
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
||||||
28.07.2014, 23:44 [ТС] | 10 | |||||
DrOffset, я разобрался с глюками, там все было просто). Вопрос насчет деструкторов тогда такой: если у меня в конструкторе просто инициализируются, например пара int переменных, то ведь они автоматически уйдут при уничтожении объекта? Но, например, в одном из конструкторов у меня вектор указателей данного класса заполняется данными. Тогда в деструкторе надо этот вектор освободить? Что-то вроде этого ты имел ввиду?
P.S.:
Tulosba, Поясни, пожалуйста, о каких символах ты говоришь
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
29.07.2014, 00:07 | 11 |
Да.
Если память выделялась через new, а потом эти указатели записывались в вектор в конструкторе, то в деструкторе надо будет пройтись по элементам вектора и вызвать для каждого delete. Ну это в первом приближении, если я правильно понял твой вопрос. А вот постскриптум твой я не понял. Это к чему?
1
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
|
29.07.2014, 00:29 [ТС] | 12 |
Да, я это и имел ввиду! Спасибо. А посскриптум- ты просто спросил, что делает MakeRect
0
|
13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
|
|
29.07.2014, 00:44 | 13 |
Антон219, что бы не путаться больше,почитай про виды памяти в с++ и время жизни объектов.
Это напрямую касается твоего вопроса
1
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
||||||
04.08.2014, 17:34 [ТС] | 15 | |||||
Tulosba, а вот это исправит дело?
0
|
04.08.2014, 17:34 | |
04.08.2014, 17:34 | |
Помогаю со студенческими работами здесь
15
Почему операция DELETE FROM... работает только в GUI, а не в консольном варианте Написать аналог процедуры Delete. Процедурой Delete и функцией Copy не пользоваться Используя delete по указателю, возвращенному new [] или delete [] указателем, возвращаемым new Какая разница между delete и delete[] В чем разница между delete и delete[]? Чем отличается delete[] от delete? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |