Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/43: Рейтинг темы: голосов - 43, средняя оценка - 4.86
 Аватар для vbloodv
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314

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

20.01.2013, 00:22. Показов 8686. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Какая разница между?
C++
1
2
3
MyObject * object = new MyObject;
// и
MyObject object;
Какие преимущества дает использование указателя на объект с последующим выделением памяти под него по сравнению с просто объектом. (помимо того что использование указателя может давать утечки памяти)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2013, 00:22
Ответы с готовыми решениями:

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B* b = nullptr; }; class B{ public:

Как сделать функцию от указателя на класс и указателя на метод?
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

31
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
20.01.2013, 03:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от MrGluck Посмотреть сообщение
Тогда, думаю, все вопросы отпадут.
На оригинальный вопрос:
Цитата Сообщение от MrGluck Посмотреть сообщение
Как то же сделать через ссылки или в стеке?
Был дан ответ выше
Цитата Сообщение от MrGluck Посмотреть сообщение
и размещение объектов в стеке даст действительную выгоду по сравнению с размещением в куче
Это уже совсем другой вопрос действительной - имхо, никакой.
0
 Аватар для vbloodv
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
20.01.2013, 03:10  [ТС]
Цитата Сообщение от Toshkarik Посмотреть сообщение
MrGluck, плюс очевиден - скорость. Из минусов - уничтожение объекта при выходе из области видимости. В остальном ничем не отличается.
Если объектов немного и они нужны только для вычисления в функции, то лучше использовать стек, если же объектов много, или важно время их существование - тут уж только new.
Несмотря на кажущуюся простоту вопрос оказался, не из простых... Спасибо за споры в которых истина вынашивалась
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.01.2013, 03:34
Vourhey, т.е просто
Цитата Сообщение от MrGluck Посмотреть сообщение
vbloodv, при создании указателя на базовый класс можно использовать полиморфизм
Надо заменить на
При использовании полиморфизма необходимо размещать объекты в куче. (необходимо == желательно). Или просто дописать в конце "без лишнего идиотизма". Т.е. как раз то, что и требовалось ТС
Цитата Сообщение от vbloodv Посмотреть сообщение
Какие преимущества дает использование указателя на объект с последующим выделением памяти под него по сравнению с просто объектом.
Но все же пример переделанный через размещение объектов в стеке (объекты разных классов в одной коллекции) был бы не лишним.
1
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
20.01.2013, 03:40
Если упростить, что 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 Посмотреть сообщение
При использовании полиморфизма необходимо размещать объекты в куче
Думаю, что вообще никогда не нужно затрагивать полиморфизм (как языковой механизм) с зависимыми от операционной системы вещами, такими как куча-стек. Они не связаны друг с другом никак.
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
20.01.2013, 05:33
Цитата Сообщение от Vourhey Посмотреть сообщение
Думаю, что вообще никогда не нужно затрагивать полиморфизм (как языковой механизм) с зависимыми от операционной системы вещами, такими как куча-стек. Они не связаны друг с другом никак.
ну в теории то оно так (в стандарте c++ слова heap и stack применяются только относительно алгоритмов и контейнеров stl'a), но по жизни то их как называть?
Не dynamic/static storage же как в стандарте (с storage unit'ами)
0
 Аватар для vbloodv
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
20.01.2013, 14:54  [ТС]
Цитата Сообщение от Vourhey Посмотреть сообщение
Думаю, что вообще никогда не нужно затрагивать полиморфизм (как языковой механизм) с зависимыми от операционной системы вещами, такими как куча-стек. Они не связаны друг с другом никак.
Не совсем понятно что хотел сказать этим автор?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
20.01.2013, 15:03
Цитата Сообщение от vbloodv Посмотреть сообщение
Не совсем понятно что хотел сказать этим автор?
Стек и куча это понятия относящиеся к операционной системе. Полиморфизм - к языку. И я бы не стал связывать их вместе словами "нужно", "необходимо" и т. д..
0
 Аватар для vbloodv
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
21.01.2013, 03:53  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Но все же пример переделанный через размещение объектов в стеке (объекты разных классов в одной коллекции) был бы не лишним.
Пожалуй он был бы очень очень полезен, даже если был полностью абстрактный !
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
21.01.2013, 10:24
Цитата Сообщение от alex_x_x Посмотреть сообщение
Не dynamic/static storage же как в стандарте (с storage unit'ами)
Да просто не всего dynamic storage != куча. Есть же alloca(), например. Он хоть со своими закидонами, но динамически разместить полиморфный объект на стеке можно. Хотя, конечно, memory pool не особо медленнее стека, но не приводит к переполнению и весёлым эффектам при выходе из функции. Но ведь на стеке размещается именно нечто временное, на один вызов. Так что всё в порядке, кроме, разве что, переполнения буфера, если созданный объект своим хвостом вылазит за пределы стека. Вот только, к сожалению, 1) alloca() об этом молчит, 2) это никак не проверить заранее; поэтому-то и она и considered harmful.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
21.01.2013, 13:25
~OhMyGodSoLong~, что такое alloca?
memory pool тоже своеобразное решение, она требует значительно больше уразумений, чем просто выделение памяти на куче/в стеке
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
21.01.2013, 13:28
Цитата Сообщение от alex_x_x Посмотреть сообщение
что такое alloca
Не стандартная функция для выделения памяти на стеке.
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
21.01.2013, 14:55
Цитата Сообщение от Toshkarik Посмотреть сообщение
Не стандартная функция для выделения памяти на стеке.
хм, не видел, какая-та специфика
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2013, 14:55
Помогаю со студенческими работами здесь

Преобразование кода без указателя в код с использованием указателя
Правильно ли выполнил? Исходный код без указателя #include <iostream> #include <cstdlib> #include <fstream> using...

В чём отличие константного указателя и указателя на константу?
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Возвращение неконстантного указателя из константного указателя на строку
Не могу до конца понять один момент. Допустим, у нас есть функция searchSymbol, которая принимает два параметра: константный указатель на...

Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ...
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... как сделать...

Преимущества знания С++
привет всем. Подскажите пожалуйста какие преимущества дает знание языка С++.? Изучив С++ что я могу сделать в гоогле не особо разборчего...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru