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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
DrMGC
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 83
#1

Удаление переменных из памаяти - C++

01.09.2013, 15:38. Просмотров 2748. Ответов 27
Метки нет (Все метки)

Как удалить переменную (в классе) созданную не через new или она автамfтически удалиться при вызове delete для объекта?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2013, 15:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удаление переменных из памаяти (C++):

Удаление переменных в куче, созданных статическим методом класса - C++
Добрый вечер форумчане. При изучении паттернов проектирования наткнулся на следующий код: #include <iostream> #include <assert.h> ...

Поменять местами значения целых переменных х и у не используя дополнительных переменных - C++
Знаю, что это очень простая задача, но никак не могу сделать, пожалуйста помогите!!! Поменять местами значения целых переменных х и у не...

Даны 5 переменных a,b,c,d,e - необходимо каждой из этих переменных присвоить число из текстового документа - C++
Есть у меня текстовый документ, в котором записаны 5 чисел. Каждое число в новой строчке. Предположим: 893 42 8 745 43 Даны 5...

Удаление переменных - PHP
где то читал что переменные нужно удалять, якобы это не так нагружает оперативную память, делаю к примеру так $a=''; $b=''; $c='';...

Удаление переменных в стеке - C++ Builder
TPoint points; points = Point(30,0); points = Point(60,20); points = Point(30,40); points = Point(0,20); ...

Удаление переменных сессии - PHP
Добрый день) Подскажите пожалуйста: Все переменные сессии можно удалить как session_unset() или session_destroy() unset($def) или...

27
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:41 #2
Переменная, память для которую выделена через new, удаляется через delete. При выходе из программы, все переменные, созданные через new, удаляются автоматически.
0
ValeryS
Модератор
6960 / 5297 / 522
Регистрация: 14.02.2011
Сообщений: 17,860
01.09.2013, 15:41 #3
Цитата Сообщение от DrMGC Посмотреть сообщение
Как удалить переменную (в классе) созданную не через new
в классе не бывает переменных есть члены класса
и они живут пока живет объект класса, независимо от того как ты их создал
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:44 #4
Цитата Сообщение от ValeryS Посмотреть сообщение
в классе не бывает переменных есть члены класса
и они живут пока живет объект класса, независимо от того как ты их создал
Блин, ну почему всегда приходится спорить...
Переменная называется переменной только потому, что её можно изменять.
Даже после "смерти" класса, область памяти, выделенная под переменную сама собой не освободится.
0
DrMGC
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 83
01.09.2013, 15:45  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
class SomeClass {
public:
    int a;
    SomeClass() {
        a = 5;
    }
 
    void rmA() {
        // т.е. здесь удалить int a не получиться?
    }
};
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:50 #6
DrMGC, а как ты её можешь удалить? Ты же не выделял под неё память динамически.
0
DrMGC
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 83
01.09.2013, 15:52  [ТС] #7
castaway, а при удалении класса она удаляется?
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:53 #8
[usr]DrMGC[/usr], а ты читаешь что пишут?
Цитата Сообщение от DrMGC Посмотреть сообщение
а при удалении класса она удаляется?
При удалении класса удаляется только переменная.
1
ValeryS
Модератор
6960 / 5297 / 522
Регистрация: 14.02.2011
Сообщений: 17,860
01.09.2013, 15:53 #9
Цитата Сообщение от castaway Посмотреть сообщение
Блин, ну почему всегда приходится спорить...
не знаю
Цитата Сообщение от castaway Посмотреть сообщение
Переменная называется переменной только потому, что её можно изменять.
C++
1
2
3
4
class A
{
int tmp;
}
tmp это переменная или член класса?
Цитата Сообщение от castaway Посмотреть сообщение
Даже после "смерти" класса, область памяти, выделенная под переменную не освободится.
C++
1
2
3
4
{
 A b;
}
// здесь объект b класса  A уничтожен, значит ли это что tmp остается в памяти


Цитата Сообщение от DrMGC Посмотреть сообщение
void rmA() {
// т.е. здесь удалить int a не получиться?
}
пока ты не создал объект SomeClass то никакого a не будет в памяти
а как только создал она будет жить сколько живет объект
1
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:57 #10
Цитата Сообщение от ValeryS Посмотреть сообщение
tmp это переменная или член класса?
Мне странно от тебя слышать, что член класса не является переменной.
Цитата Сообщение от ValeryS Посмотреть сообщение
пока ты не создал объект SomeClass то никакого a не будет в памяти
а как только создал она будет жить сколько живет объект
Мне казалось что в теме обсуждается динамическое выделение/освобождение памяти.
0
ValeryS
Модератор
6960 / 5297 / 522
Регистрация: 14.02.2011
Сообщений: 17,860
01.09.2013, 16:07 #11
castaway,
я кажется понял что ты хотел сказать
C++
1
2
3
4
5
6
7
8
9
class A 
{
int * tmp;
 A(){ tmp=new int;};
}
 
{
 A b;
}
объект пропал, но память осталась
ты про это?

ну не совсем так член класса tmp, указатель, то же пропал
а выделенная память осталась, но до неё уже никто не достучится, поскольку нет указателя, налицо утечка памяти
но ведь речь то не про это

Добавлено через 5 минут
Цитата Сообщение от castaway Посмотреть сообщение
Мне странно от тебя слышать, что член класса не является переменной.
а он и не является, или является, как посмотреть
пока не создан объект это просто описалово которое физически не присутствует в памяти
а как только создан то появляется в памяти, и можно сказать, что это переменная, но не простая а связанная с объектом
C++
1
2
3
4
5
6
7
A b;
A c;
A e;
 
b.tmp=5;
c.tmp=10;
e.tmp=15;
есть в памяти переменная tmp? нет её
а есть три разных переменных b.tmp, c.tmp и e.tmp
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 16:11 #12
Цитата Сообщение от ValeryS Посмотреть сообщение
объект пропал, но память осталась
ты про это?
Да. Именно про это.

Цитата Сообщение от ValeryS Посмотреть сообщение
а выделенная память осталась, но до неё уже никто не достучится, поскольку нет указателя, налицо утечка памяти
но ведь речь то не про это
Я просто упомянул об этом. Я не говорил что к нему "можно достучаться". "Достучаться" к нему будет нельзя, именно из-за этого и появится утечка памяти.

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
а он и не является, или является, как посмотреть
А тут нечего смотреть, он является переменной. Если хочешь "похоливарить" - милости прошу
0
ValeryS
Модератор
6960 / 5297 / 522
Регистрация: 14.02.2011
Сообщений: 17,860
01.09.2013, 16:17 #13
Цитата Сообщение от castaway Посмотреть сообщение
Я не говорил что к нему "можно достучаться".
значит это уже не переменная
это просто участок памяти, причем занятый
чтобы была понятна разница между переменной и памятью посмотри на это
C++
1
2
3
int *a;
for(int i=0;i<10;i++)
  a=new int;
память будет выделена под десять int, но работать можем только с одним, последним, куда указывает указатель
остальные потеряли
вот и переменная(указатель) есть и память есть занятая а добраться до неё не можем

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
А тут нечего смотреть, он является переменной.
хорошо а элементы структуры, ты тоже называешь переменной?
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 16:20 #14
Я не называю переменной выделенный участок памяти. В твоем примере переменная - это a, а не то, на что указывает указатель в виде имени a.
Цитата Сообщение от ValeryS Посмотреть сообщение
хорошо а элементы структуры, ты тоже называешь переменной?
Не совсем понял что ты хотел этим сказать. Поясни. Если можно с примером.
0
ValeryS
Модератор
6960 / 5297 / 522
Регистрация: 14.02.2011
Сообщений: 17,860
01.09.2013, 16:25 #15
Цитата Сообщение от castaway Посмотреть сообщение
Я не называю переменной выделенный участок памяти.
это и есть выделенный участок памяти
Цитата Сообщение от castaway Посмотреть сообщение
В твоем примере переменная - это a.
а это указатель на выделенную память
указатель знает про память которую выделили, а память ничего не знает про указатель
Цитата Сообщение от castaway Посмотреть сообщение
Не совсем понял что ты хотел этим сказать. Поясни. Если можно с примером.
смотри
C++
1
2
3
4
5
6
7
8
9
10
class Cl
{
public:
 int a;
}
 
struct str
{
int b;
}
это синонимы
a ты называешь переменной
значит ли это что b ты тоже называешь переменной
0
01.09.2013, 16:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2013, 16:25
Привет! Вот еще темы с ответами:

Удаление get переменных из url - PHP
Здравствуйте! Есть такой код: $fn = array(&quot;1.log&quot;, &quot;2.log&quot;, &quot;3.log&quot;, &quot;4.log&quot;); $name = $fn; function arr_make($i) { $read =...

Удаление глобальных переменных - PHP ООП
Локальные переменные внутри функций не видимы на всю область приложения.Глобальные наоборот. $app = 'app'; //манипуляции с...

Инициализация и удаление переменных из памяти - C#
Скажите, правильно ли я понимаю процесс? (в коде я поставил комментарии) Если что, исправьте и покажите, что я понимаю неправильно. ...

Удаление переменных в определенное время - PHP
Есть массив с переменными, в него занесены ip адреса пользователей и мне надо что бы к примеру в 24:00 каждые сутки этот массив удалялся ну...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru