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

Память. Стек или куча - есть ли преимущества одного кода над другим? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
OlegPL
5 / 5 / 0
Регистрация: 22.10.2013
Сообщений: 100
29.07.2014, 10:59     Память. Стек или куча - есть ли преимущества одного кода над другим? #1
Здравствуйте, хотел спросить в чем различия. В чем тут недостатки и преимущества разных способов?
C++
1
Apple apple();
и
C++
1
2
Apple *apple = new Apple();
delete apple;
И обязательно ли после второго способа делать delete?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2014, 10:59     Память. Стек или куча - есть ли преимущества одного кода над другим?
Посмотрите здесь:

Стек и куча C++
Что такое куча,стек,очередь? C++
C++ Стек или динамическая память!?
C++ Подскажите где ошибка, или может есть другой вариант реализации кода
C++ Стек и куча
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2014, 11:01     Память. Стек или куча - есть ли преимущества одного кода над другим? #2
Цитата Сообщение от OlegPL Посмотреть сообщение
Apple apple();
объявление ф-ци с именем apple принимающая 0 параметров, и возвращаемым типом данных Apple не путать с
C++
1
Apple apple;//конструктор по умолчанию
Добавлено через 1 минуту
Цитата Сообщение от OlegPL Посмотреть сообщение
И обязательно ли после второго способа делать delete?
да обязательно, Вы же захватили участок памяти потом его надо освободить!
нет способа лучше или хуже, есть разница по подходи, и этот подход зависит от требуемого результата
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
29.07.2014, 11:02     Память. Стек или куча - есть ли преимущества одного кода над другим? #3
В первом случае - это прототип функции, во втором - указатель на объект класса.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2014, 11:07     Память. Стек или куча - есть ли преимущества одного кода над другим? #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
Apple p = NULL;
{
Apple apple;
p = new Apple();
}
 
p->Имя_метода //работает
//а к экземпляру apple уже не обратиться
return 0;
}
Добавлено через 3 минуты
еще интересный момент, проследите внимательно пусть есть ф-ция которая создает объект класса
C++
1
2
3
4
5
Apple* CreateAppleObject()//возвращает указатель на объект
{
Apple apple;
return &apple;//взяли адрес объекта и вернули его
}
распространненная ошибка, вышли из ф-ции объект удалился и по указателю лежит неведомо что(в общем случае это Undefined behavior)
или вот так
C++
1
2
3
4
5
Apple* CreateAppleObject()//возвращает указатель на объект
{
Apple * apple = new Apple();
return apple;
}
по выходу из ф-ции все норм указатель валиден, но главное не забыть удалить
OlegPL
5 / 5 / 0
Регистрация: 22.10.2013
Сообщений: 100
29.07.2014, 11:09  [ТС]     Память. Стек или куча - есть ли преимущества одного кода над другим? #5
Первый случай: объект хранится в стеке и он является аналогом int, double по хранению в памяти, то есть не ссылка, а ValueType?
Второй случай: мы выделили место в памяти в куче он объект является ссылкой?

Пришел из С# и путаюсь...
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2014, 11:12     Память. Стек или куча - есть ли преимущества одного кода над другим? #6
Цитата Сообщение от OlegPL Посмотреть сообщение
то есть не ссылка, а ValueType?
тут нет такого, это просто объект который удалится при выходе из области видимости
Цитата Сообщение от OlegPL Посмотреть сообщение
Второй случай: мы выделили место в памяти в куче он объект является ссылкой?
объект он и в африке объект просто мы его создали и получили указатель на область памяти где он расположен,
и по выходу из области видимости объект не удалится

Добавлено через 1 минуту
OlegPL, советую почитать про ссылки и указатели
Yandex
Объявления
29.07.2014, 11:12     Память. Стек или куча - есть ли преимущества одного кода над другим?
Ответ Создать тему
Опции темы

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