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

указатели и очистка памяти - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с файлами http://www.cyberforum.ru/cpp-beginners/thread706942.html
Почему программа не читает из файла матрицу, а просто выводит мне пустую консоль? #include <iostream> #include <stdio.h> #include <math.h> using namespace std; int main(){ FILE* f; ...
C++ Как сбросить поток для чтения файла с начала? Добрый вечер. Создали поток, связали с ним файл (текстовый). Начинаем чтение файла, читаем, читаем, пришли к его концу. Как теперь заставить поток вновь начать чтение файла с самого начала? http://www.cyberforum.ru/cpp-beginners/thread706932.html
Структуры (Описать структуру «комплексное число») C++
Описать структуру «комплексное число» (действительная часть (re), мнимая часть (im)). Определить функцию, вычисляющую значение квадратного трехчлена a*x*x+b*x+c в комплексной точке x .
Структуры( Описать структуру с именем NOTE) C++
Описать структуру с именем NOTE, содержащую поля: -фамилия и имя; -номер телефона; -дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: -ввод с клавиатуры...
C++ В чем ошибка? что не так? http://www.cyberforum.ru/cpp-beginners/thread706920.html
Не знал куда написать... не могу понять почему программы на С и С++ вычисляют разное значение косинус #include<stdio.h> #include<math.h> #define E 0.000001 int main() { float x; ...
C++ окно из длл появилась надобность сделать такую вещь: нужно сделать некую функцию вызываемую из длл по вызову которой появляется окно функцию представляю такого вида : входные п( высота, ширина, фулскрин... подробнее

Показать сообщение отдельно
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.11.2012, 12:57
Цитата Сообщение от ntny Посмотреть сообщение
В отличии от java в с++ память по умолчанию нужно очищать самостоятельно.
Понятно, что если память зарезервированная неким указателем не нужна его следует просто удалить.
но если указатель например р1 ссылается на структуру, мне же нужно присвоить указателю другую структуру того же типа содержащуюся в адресе р2.
Т.е. если я просто присвою указателю р1 который уже содержит структуру адрес новой структуры указателя р2, то старые данные потеряются навсегда но будут занимать место?
Правильно ли я поступлю, если создам новый новый указатель р0, сделаю присвоения р0 = р1; затем delete* р0;
и далее p1 = p2 ?
К слову читал, что в С++ есть сборщики мусора.
Насколько они используются ?
Это экзотика или же стандартная фича?
Есть массив/список/дерево/любой другой контейнер, а есть указатель на текущий элемент. Их нельзя путать. Если ты выделил
C++
1
p1=new ...
, то p1 - указатель на контейнер, либо служебный указатель самого контейнера на элемент и присваивать ему ничего нельзя до
C++
1
delete p1;
или
C++
1
delete [] p1;
, если же ты хочешь заресайзить массив без потери инфы, то сначала надо выделить память в промежуточный указатель, потом скопировать сохраняемые элементы, потом удалить делитом старый указатель и только потом присвоить ему промежуточный.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int *p1=new int 10;
...
int *p2;
int *p3;
int *p4;
p2=new int 300;
for (p3=p1+9, p4=p2+9; p3>=p1; --p3, --p4)
{
 *p4=*p3;
}
delete [] p1;
p1=p2;
...
delete [] p1;
. Если же ты присвоил указателю некий адрес, то это только текущий указатель и его нельзя делитить. Хранение и перебор - две разные задачи. И ни кто в здравом уме деструкторы сам не вызывает, это обязанность компилятора, а прописать в деструкторе, что такой указатель надо освободить, а по такому пройти и обнулить встречный может только автор, ни какой сборщик ни когда об этом не догадается.

Добавлено через 4 минуты
Цитата Сообщение от ntny Посмотреть сообщение
р0 = р1; затем delete* р0;
и далее p1 = p2 ?
правильно, но избыточно.
C++
1
2
delete p1;
p1=p2;
.

Добавлено через 4 минуты
Цитата Сообщение от ntny Посмотреть сообщение
Есть ли в С++ возможность ограничивать использование "вспомогаельных классов"
Т.е. есть собственный класс в собственном пространстве имен.
Для некоторых операций хочу написать подкласс.
Но было бы нежелательно, чтобы этот подкласс можно было вызвать из "клиентского" кода.
В java есть очень удобный пакетный доступ для этих целей.
В чём же его удобство? Если класс должен быть закрыт, его можно прописать внутри другого класса и закрыть по protected, или по private, или вообще не выносить в голову, или вынести в отдельную голову и инкладить её не везде, а если пишешь библиотеку, то клиенту можно эту отдельную голову вообще не выдавать, она и будет закрыта, а а пакет вообще не понятно что вообще такое и для чего нужен.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru