1 / 1 / 1
Регистрация: 19.07.2016
Сообщений: 118
1

Указатели и динамическая память new delete

24.12.2017, 13:32. Показов 406. Ответов 1

Начал работать умными указателями, в итоге как понял не сильно освоил то и Cи указатели.

1) В каких случаях я должен выделять память с помощью new?

Здесь я создаю переменную a без всяких new или delete, для нее автоматически выделяется память, потом я присваиваю ее адрес указателю p и всё работает.
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
 
int main()
{
    int a = 3;
    int *p = &a;
    std::cout << *p << std::endl;
    delete p; //?? тут вообще это нужно?
}
Здесь я выделяю память что позволяет лишь избежать дополнительно ненужной созданной переменной а как в первом примере
C++
1
2
3
4
5
6
7
8
#include<iostream>
 
int main()
{
    int *p = new int(3);
    std::cout << *p << std::endl;
    delete p;
}
Я понимаю что такое динамическая память, что я ее выделяю самостоятельно, для своей программы, её никто не займёт, но стоит ли это того? Я же никогда не обращаюсь к ячейкам памяти на прямую, не щёлкаю транзисторами или знаю наизусть каждую область памяти моего ПК. Я просто пишу код, какое это имеет значение если я напишу
C++
1
 int a = 3; // создаю переменную = 3
или
C++
1
 int *p = new int(3); выделяю память для int = 3 и заношу адрес ячейки в указатель
Нелогично ли было бы каждую переменную, каждый класс и массив создавать как указатель, ведь пока программа работает юзается оперативная память

Спасибо за понимание
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2017, 13:32
Ответы с готовыми решениями:

Динамическая память new, delete
Всем привет! Столкнулся с понятием &quot;выделение динамической памяти&quot;, прочел несколько статей на эту...

Когда высвобождается динамическая память без delete
Доброго времени суток. Прошу подсказку. Знаю что new и delete по возможности вообще нужно...

Указатели и Динамическая память
Создать в динамической памяти массив вещественных чисел размерности R. Заполнить его случайными...

Указатели.Динамическая память.
Перепешите пожалуйста на С/С++! &lt;script&gt; var n = new Number(); var m = new Number(); n =...

1
494 / 208 / 70
Регистрация: 27.05.2016
Сообщений: 554
24.12.2017, 14:54 2
Сергей Мишин, как бы проще обяснить, используй динамическое выделение памяти в случаях, когда нужно выделить зарание не определенное количество этой памяти.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    int size;
    std::cout << "Enter the size: ->";
    std::cin >> size; // не известно, какой размер введет пользователь
 
    int *arr = new int[size];
    //use arr
    delete [] arr;
}
А конструкции вида int *p = new int(3); не имеют особого смысла и чреваты утечками памяти (если забыть потом ее освободить).

Добавлено через 4 минуты
Цитата Сообщение от Сергей Мишин Посмотреть сообщение
int main()
{
* * int a = 3;
* * int *p = &a;
* * std::cout << *p << std::endl;
* * delete p; //?? тут вообще это нужно? НЕТ, НЕ НУЖНО
}
new и delete используеться парами - на один new свой один
delete
. Это ж в каждой книге пишут.

Добавлено через 5 минут
Цитата Сообщение от Сергей Мишин Посмотреть сообщение
Здесь я создаю переменную a без всяких new или delete, для нее автоматически выделяется память
Эта переменная имеет automatic storage duration и выделяеться на стеке в начале блока: Storage duration specifiers. И живет пока не выйдет из этого блока (в даном случае из main).

Добавлено через 6 минут
Цитата Сообщение от Сергей Мишин Посмотреть сообщение
Нелогично ли было бы каждую переменную, каждый класс и массив создавать как указатель, ведь пока программа работает юзается оперативная память
Тогда эти переменные и/или объекты будут жить до того момента, когда явно не освободят выделенную для них память, через delete, если, конечно, не забудут этого сделать.

Добавлено через 1 минуту

Не по теме:

Если что, то поправьте, если я неправильно вызказался в терминах или понятиях (не силен в терминологии).

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2017, 14:54

Указатели и динамическая память
Не могу немного понять, допустим, я хочу создать массив, зачем мне под него выделять память, почему...

Указатели и динамическая память
Здравствуйте. Почему размер памяти для указателя выделяется такой же как для объекта в куче....

Указатели. Динамическая память.
Нужно очень срочно. Сегодня последний день сдачи. 1. Дано натуральное число n. Определить...

Динамическая память, указатели
есть два вектора структуры s1 нужно поместить в элемент вектора указатель на следующий, в...

Указатели и динамическая память
Помогите пожалуйста, написать программу. Описать 2 указателя на целый тип. Выделить для них...

Указатели. Динамическая память в С++
Найти наибольшую и наименьшую цифры в записи данного натурального числа. У меня есть код на...


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

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

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