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

Преимущества указателя? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
20.01.2013, 00:22     Преимущества указателя? #1
Какая разница между?
C++
1
2
3
MyObject * object = new MyObject;
// и
MyObject object;
Какие преимущества дает использование указателя на объект с последующим выделением памяти под него по сравнению с просто объектом. (помимо того что использование указателя может давать утечки памяти)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2013, 00:22     Преимущества указателя?
Посмотрите здесь:

C++ Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0]
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... C++
C++ объединить преимущества кодов
C++ задача найти преимущества использования контенеров vec и set
C++ какие преимущества дает интерфейсное программирование?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.01.2013, 03:01     Преимущества указателя? #21
Цитата Сообщение от MrGluck Посмотреть сообщение
Тогда, думаю, все вопросы отпадут.
На оригинальный вопрос:
Цитата Сообщение от MrGluck Посмотреть сообщение
Как то же сделать через ссылки или в стеке?
Был дан ответ выше
Цитата Сообщение от MrGluck Посмотреть сообщение
и размещение объектов в стеке даст действительную выгоду по сравнению с размещением в куче
Это уже совсем другой вопрос действительной - имхо, никакой.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
20.01.2013, 03:10  [ТС]     Преимущества указателя? #22
Цитата Сообщение от Toshkarik Посмотреть сообщение
MrGluck, плюс очевиден - скорость. Из минусов - уничтожение объекта при выходе из области видимости. В остальном ничем не отличается.
Если объектов немного и они нужны только для вычисления в функции, то лучше использовать стек, если же объектов много, или важно время их существование - тут уж только new.
Несмотря на кажущуюся простоту вопрос оказался, не из простых... Спасибо за споры в которых истина вынашивалась
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
20.01.2013, 03:34     Преимущества указателя? #23
Vourhey, т.е просто
Цитата Сообщение от MrGluck Посмотреть сообщение
vbloodv, при создании указателя на базовый класс можно использовать полиморфизм
Надо заменить на
При использовании полиморфизма необходимо размещать объекты в куче. (необходимо == желательно). Или просто дописать в конце "без лишнего идиотизма". Т.е. как раз то, что и требовалось ТС
Цитата Сообщение от vbloodv Посмотреть сообщение
Какие преимущества дает использование указателя на объект с последующим выделением памяти под него по сравнению с просто объектом.
Но все же пример переделанный через размещение объектов в стеке (объекты разных классов в одной коллекции) был бы не лишним.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.01.2013, 03:40     Преимущества указателя? #24
Если упростить, что m - паблик и есть какой-нибудь виртуальный метод a()
C++
1
2
3
4
5
6
7
    B b;
    C c;
    D d;
    d.m["B"] = &b;
    d.m["C"] = &c;
    d.m["B"]->a();
    d.m["C"]->a();
Цитата Сообщение от MrGluck Посмотреть сообщение
При использовании полиморфизма необходимо размещать объекты в куче
Думаю, что вообще никогда не нужно затрагивать полиморфизм (как языковой механизм) с зависимыми от операционной системы вещами, такими как куча-стек. Они не связаны друг с другом никак.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
20.01.2013, 05:33     Преимущества указателя? #25
Цитата Сообщение от Vourhey Посмотреть сообщение
Думаю, что вообще никогда не нужно затрагивать полиморфизм (как языковой механизм) с зависимыми от операционной системы вещами, такими как куча-стек. Они не связаны друг с другом никак.
ну в теории то оно так (в стандарте c++ слова heap и stack применяются только относительно алгоритмов и контейнеров stl'a), но по жизни то их как называть?
Не dynamic/static storage же как в стандарте (с storage unit'ами)
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
20.01.2013, 14:54  [ТС]     Преимущества указателя? #26
Цитата Сообщение от Vourhey Посмотреть сообщение
Думаю, что вообще никогда не нужно затрагивать полиморфизм (как языковой механизм) с зависимыми от операционной системы вещами, такими как куча-стек. Они не связаны друг с другом никак.
Не совсем понятно что хотел сказать этим автор?
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
20.01.2013, 15:03     Преимущества указателя? #27
Цитата Сообщение от vbloodv Посмотреть сообщение
Не совсем понятно что хотел сказать этим автор?
Стек и куча это понятия относящиеся к операционной системе. Полиморфизм - к языку. И я бы не стал связывать их вместе словами "нужно", "необходимо" и т. д..
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
21.01.2013, 03:53  [ТС]     Преимущества указателя? #28
Цитата Сообщение от MrGluck Посмотреть сообщение
Но все же пример переделанный через размещение объектов в стеке (объекты разных классов в одной коллекции) был бы не лишним.
Пожалуй он был бы очень очень полезен, даже если был полностью абстрактный !
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.01.2013, 10:24     Преимущества указателя? #29
Цитата Сообщение от alex_x_x Посмотреть сообщение
Не dynamic/static storage же как в стандарте (с storage unit'ами)
Да просто не всего dynamic storage != куча. Есть же alloca(), например. Он хоть со своими закидонами, но динамически разместить полиморфный объект на стеке можно. Хотя, конечно, memory pool не особо медленнее стека, но не приводит к переполнению и весёлым эффектам при выходе из функции. Но ведь на стеке размещается именно нечто временное, на один вызов. Так что всё в порядке, кроме, разве что, переполнения буфера, если созданный объект своим хвостом вылазит за пределы стека. Вот только, к сожалению, 1) alloca() об этом молчит, 2) это никак не проверить заранее; поэтому-то и она и considered harmful.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
21.01.2013, 13:25     Преимущества указателя? #30
~OhMyGodSoLong~, что такое alloca?
memory pool тоже своеобразное решение, она требует значительно больше уразумений, чем просто выделение памяти на куче/в стеке
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
21.01.2013, 13:28     Преимущества указателя? #31
Цитата Сообщение от alex_x_x Посмотреть сообщение
что такое alloca
Не стандартная функция для выделения памяти на стеке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2013, 14:55     Преимущества указателя?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
21.01.2013, 14:55     Преимущества указателя? #32
Цитата Сообщение от Toshkarik Посмотреть сообщение
Не стандартная функция для выделения памяти на стеке.
хм, не видел, какая-та специфика
Yandex
Объявления
21.01.2013, 14:55     Преимущества указателя?
Ответ Создать тему
Опции темы

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