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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
DrMGC
 Аватар для DrMGC
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 83
01.09.2013, 15:38     Удаление переменных из памаяти #1
Как удалить переменную (в классе) созданную не через new или она автамfтически удалиться при вызове delete для объекта?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2013, 15:38     Удаление переменных из памаяти
Посмотрите здесь:

Удаление строки из файла\либо удаление самого файла. C++
C++ Массив из переменных
C++ Описать класс «множество» (добавление и удаление элемента, пересечение, объединение и удаление множеств )
C++ Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один))
C++ Даны 5 переменных a,b,c,d,e - необходимо каждой из этих переменных присвоить число из текстового документа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:41     Удаление переменных из памаяти #2
Переменная, память для которую выделена через new, удаляется через delete. При выходе из программы, все переменные, созданные через new, удаляются автоматически.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
01.09.2013, 15:41     Удаление переменных из памаяти #3
Цитата Сообщение от DrMGC Посмотреть сообщение
Как удалить переменную (в классе) созданную не через new
в классе не бывает переменных есть члены класса
и они живут пока живет объект класса, независимо от того как ты их создал
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:44     Удаление переменных из памаяти #4
Цитата Сообщение от ValeryS Посмотреть сообщение
в классе не бывает переменных есть члены класса
и они живут пока живет объект класса, независимо от того как ты их создал
Блин, ну почему всегда приходится спорить...
Переменная называется переменной только потому, что её можно изменять.
Даже после "смерти" класса, область памяти, выделенная под переменную сама собой не освободится.
DrMGC
 Аватар для 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 не получиться?
    }
};
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:50     Удаление переменных из памаяти #6
DrMGC, а как ты её можешь удалить? Ты же не выделял под неё память динамически.
DrMGC
 Аватар для DrMGC
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 83
01.09.2013, 15:52  [ТС]     Удаление переменных из памаяти #7
castaway, а при удалении класса она удаляется?
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:53     Удаление переменных из памаяти #8
[usr]DrMGC[/usr], а ты читаешь что пишут?
Цитата Сообщение от DrMGC Посмотреть сообщение
а при удалении класса она удаляется?
При удалении класса удаляется только переменная.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
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 не будет в памяти
а как только создал она будет жить сколько живет объект
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 15:57     Удаление переменных из памаяти #10
Цитата Сообщение от ValeryS Посмотреть сообщение
tmp это переменная или член класса?
Мне странно от тебя слышать, что член класса не является переменной.
Цитата Сообщение от ValeryS Посмотреть сообщение
пока ты не создал объект SomeClass то никакого a не будет в памяти
а как только создал она будет жить сколько живет объект
Мне казалось что в теме обсуждается динамическое выделение/освобождение памяти.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
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
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 16:11     Удаление переменных из памаяти #12
Цитата Сообщение от ValeryS Посмотреть сообщение
объект пропал, но память осталась
ты про это?
Да. Именно про это.

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

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
а он и не является, или является, как посмотреть
А тут нечего смотреть, он является переменной. Если хочешь "похоливарить" - милости прошу
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
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 Посмотреть сообщение
А тут нечего смотреть, он является переменной.
хорошо а элементы структуры, ты тоже называешь переменной?
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 16:20     Удаление переменных из памаяти #14
Я не называю переменной выделенный участок памяти. В твоем примере переменная - это a, а не то, на что указывает указатель в виде имени a.
Цитата Сообщение от ValeryS Посмотреть сообщение
хорошо а элементы структуры, ты тоже называешь переменной?
Не совсем понял что ты хотел этим сказать. Поясни. Если можно с примером.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
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 ты тоже называешь переменной
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 16:29     Удаление переменных из памаяти #16
Цитата Сообщение от ValeryS Посмотреть сообщение
а это указатель на выделенную память
a - это переменная, хоть и указатель. Она содержит адрес.
Цитата Сообщение от ValeryS Посмотреть сообщение
значит ли это что b ты тоже называешь переменной
Разумеется. a - тоже переменная (не зависимо от области видимости). Ты же можешь их изменить! От того они и называются переменными, потому что они переменны, их можно изменять.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
01.09.2013, 16:40     Удаление переменных из памаяти #17
Цитата Сообщение от castaway Посмотреть сообщение
Ты же можешь их изменить!
понятно
ты называешь переменными все что можно изменить
но член классы как и элемент структуры несколько по другому себя ведут
пока ты не объявил объект их нет в памяти а как только объявил то они появляются, хотя явно ты их не объявлял
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 16:43     Удаление переменных из памаяти #18
Цитата Сообщение от ValeryS Посмотреть сообщение
ты называешь переменными все что можно изменить
Это не я так их называю. Они так называются по-определению.
Цитата Сообщение от ValeryS Посмотреть сообщение
пока ты не объявил объект их нет в памяти а как только объявил то они появляются, хотя явно ты их не объявлял
Я вообще не понимаю при чем тут объект. Переменная называется переменной вне зависимости от того где она находится.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
01.09.2013, 18:26     Удаление переменных из памаяти #19
Цитата Сообщение от castaway Посмотреть сообщение
Это не я так их называю. Они так называются по-определению.
пример можно
сейчас пересмотрел стандарт
"Working Draft, Standard for Programming Language C++"
в частности "9.2 Class members"
н у не увидел слова variable
все в основном "members"
вот например
5 A member can be initialized using a constructor;
или вот
8 Non-static (9.4) data members shall not have incomplete types. In particular, a class C shall not contain a non-static
member of class C, but it can contain a pointer or reference to an object of class C.
6 A member shall not be auto, extern, or register.
ну не вижу я чтобы их называли переменными
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2013, 18:52     Удаление переменных из памаяти
Еще ссылки по теме:

Объявление переменных в С++ C++
Объявление переменных C++
Здесь есть удаление столбца, как добавить удаление строки C++

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 18:52     Удаление переменных из памаяти #20
Цитата Сообщение от ValeryS Посмотреть сообщение
ну не вижу я чтобы их называли переменными
Блин.. Ну ты этого и не увидишь. Это так сказать, прописные истины. Это та основа, которую надо знать до изучения любого ЯП.
Yandex
Объявления
01.09.2013, 18:52     Удаление переменных из памаяти
Ответ Создать тему
Опции темы

Текущее время: 08:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru