Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
-7 / 2 / 1
Регистрация: 10.04.2016
Сообщений: 53

Используются ли на практике указатели на указатели объектов?

09.07.2016, 08:24. Показов 3424. Ответов 67
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеются ввиду указатели именно на объекты, а не динамические массивы.
Например такой: Object** obj;
А как насчёт такого: Object*** obj;

Если такие приёмы используются, приведите пример, где это целесообразно.
Какие аналоги применяются в таких языках как C#?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2016, 08:24
Ответы с готовыми решениями:

Как на практике используются указатели на члены класса
Вопрос №3. А как на практике используются указатели на члены класса? Они в реальном коде вообще используется? Приведите пример когда они...

Указатели от теории к практике
Здравствуйте! Вопрос у меня вот в чем. Как то не приходилось работать с указателями. Почитав материал вроде все понятно. Получить...

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

67
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
09.07.2016, 09:01
Цитата Сообщение от O_Q Посмотреть сообщение
Имеются ввиду указатели именно на объекты, а не динамические массивы.
Например такой: Object** obj;
А как насчёт такого: Object*** obj;
Это не указатели на объект. Но вы пишите в утвердительной форме - у вас есть противоположная информация?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.07.2016, 09:27
O_Q, поскольку значение по указателю * в динамической памяти может быть реализованно как массив, то ** это массив массивов, т.е 2d массив. Так почему не быть массиву массивов массивов - 3d массиву?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
09.07.2016, 09:30
Лучший ответ Сообщение было отмечено vxg как решение

Решение

O_Q, указатель на указатель может быть передан в качестве аргумента в функцию которая собирается вернуть в качестве результата указатель на объект и собирается это сделать через аргумент. Тройной звездочке с ходу задачку не придумаю
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.07.2016, 09:37
Цитата Сообщение от vxg Посмотреть сообщение
Тройной звездочке с ходу задачку не придумаю
Инициализируем двумерный массив указатель ** в функции передавая его по указателю.
Хотя передача ссылки на указатель проще: T **& ptr_to_T
ps
Цитата Сообщение от O_Q Посмотреть сообщение
Имеются ввиду указатели именно на объекты, а не динамические массивы.
не проснулся ещё. Всё можно удалить.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
09.07.2016, 09:45
IGPIGP, ссылки не есть хорошо это раз, а два это то что тс хочет пример использования без массивов - с массивами все просто - достаточно лишь посчитать звездочки и объявить что это массив такой вот размерности
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
09.07.2016, 09:47
Лучший ответ Сообщение было отмечено vxg как решение

Решение

O_Q, например в сортировке массива указателей...
Массив указателей
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.07.2016, 09:50
Цитата Сообщение от vxg Посмотреть сообщение
ссылки не есть хорошо это раз
Почему?
Цитата Сообщение от vxg Посмотреть сообщение
, а два это то что тс хочет пример использования без массивов
это я увидел, но позже.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
09.07.2016, 09:55
IGPIGP, потому что если в функцию передается что-то что может быть в ней изменено лучше дать об этом знать всему свету передавая в нее указатель. исключением могут быть лишь функции в которых участвуют потоки (там так исторически заложено) или, может быть, перегрузка некоторых операторов в которой без ссылки получится адское уродство
0
-7 / 2 / 1
Регистрация: 10.04.2016
Сообщений: 53
09.07.2016, 10:22  [ТС]
Спасибо за ответы.
Может вы работали с языками со сборкой мусора, там такие указатели не доступны в принципе. Как в этом случае можно провести аналогию в решении подобных задач?

Цитата Сообщение от O_Q Посмотреть сообщение
Какие аналоги применяются в таких языках как C# или Java?
На всякий случай опережаю вопрос "что конкретно тебе нужно от этого?": мне сейчас важна не какая-то конкретная задача, а понять принципы использования многоуровневых указателей в С++ и аналогия этих механизмов в Java-подобных языках. Какие задачи этим решаются и решаются ли вообще, возможно придуманы лучшие способы обхода мимо многоуровневых указателей, такие как контейнеры или что-то в этом роде.

Если нужно больше конкретики, поставлю философский вопрос так: если запретить многоуровневые указатели на (!) объекты в С++, какие трудности возникнут и будут ли они критичны. Как без них обходятся Java-подобные языки и какие трудности при этом возникают?
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
09.07.2016, 10:23
В современном C++ и обычные-то одинарные указатели использовать не следует.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
09.07.2016, 11:20
O_Q, в Ява вы не можете вернуть результат в аргументе если аргумент это не обьект и вы всегда можете модифицировать аргумент внутри функции если он является объектом - просто такой язык - нет опции = другой подход

Добавлено через 26 секунд
Nick Alte, ну ну
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.07.2016, 13:25
Цитата Сообщение от vxg Посмотреть сообщение
IGPIGP, потому что если в функцию передается что-то что может быть в ней изменено лучше дать об этом знать всему свету передавая в нее указатель.
Холиварный момент. Указатель по ссылке это самое то, если говорить про адское.
Цитата Сообщение от O_Q Посмотреть сообщение
там такие указатели не доступны в принципе
Не совсем. Объявить ссылку на ссылку насколько я помню можно (C#). В С++ нельзя. Но в конкретной ситуации связанной с передачей T** чтобы получить изменение T* аналогии нет. В C# например, всё передаётся ссылками, потому что всё - ссылки. Кроме встроенных типов значения и строк, а так же пользовательских структур. Но при передаче типов значения по ссылке ключевые слова ref и out присутствуют лишь в списке параметров/аргументов. Сами переменные объявляются по значению. В сравнении с С++ это ближе к ссылкам. Указатель же в отличие от ссылки нормальный тип в том смысле, что он и объявляется и передаётся одинаково.
1
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
09.07.2016, 15:05
IGPIGP, скорее не холивар а лайвхак) среднего ума сопровождающий разработчик быстрее осознаёт что передача в функцию адреса указателя и присвоение значения разыменованию этого адреса внутри функции происходит не спроста. В случае со ссылками его может ждать упс

Добавлено через 57 секунд
По второму - я писал не за шарп а за яву
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.07.2016, 16:13
Цитата Сообщение от vxg Посмотреть сообщение
среднего ума сопровождающий разработчик быстрее осознаёт что передача в функцию адреса указателя и присвоение значения разыменованию этого адреса внутри функции происходит не спроста.
Дык если ему для этого постоянно нужен значок напоминания разыменования, то может это его личное дело? В конце концов, когда нужно избежать копирования, но недопустить модификации, есть возможность объявить формальный параметр константной ссылкой. И если юзер "нечаянно" скастит переменную, чтобы обойти её константность и это будет ненамеренно(!), то это уже не склероз, а болезнь Паркинсона (imho). Или недержание передних конечностей, по крайней мере. В таком разе клиент запросто модифицирует и переданное по указателю (ненамеренно ). А константную ссылку всё-таки, ещё скастить надо, - мороки больше.
Но я согласен с тобой в том, что если предусмотрен возврат nothing (0/NULL/nullptr), то указатель, это выбор истинных джентльменов.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
09.07.2016, 16:29
Цитата Сообщение от vxg Посмотреть сообщение
потому что если в функцию передается что-то что может быть в ней изменено лучше дать об этом знать всему свету передавая в нее указатель
Это больше смахивает на принцип привыкших к указателям чистых сишников, чем на объективную причину

Цитата Сообщение от IGPIGP Посмотреть сообщение
Но я согласен с тобой в том, что если предусмотрен возврат nothing (0/NULL/nullpnr), то указатель, это выбор истинных джентльменов.
Серьезно? То есть, если функция должна создать объект и вернуть его, или же не возвращать ничего, - то в этом случае мы будем создавать объект в куче и возвращать указатель?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.07.2016, 16:50
Цитата Сообщение от ct0r Посмотреть сообщение
Серьезно?
Вполне.
Цитата Сообщение от ct0r Посмотреть сообщение
То есть, если функция должна создать объект и вернуть его, или же не возвращать ничего, - то в этом случае мы будем создавать объект в куче и возвращать указатель?
Этого не понял. В функцию уже передаётся указатель. По указателю или ссылке. Если по указателю, то можно в случае несоздания отсутствия объекта, записать в указатель nothing. В случае со ссылкой этого сделать нельзя. Я это имел ввиду по крайней мере.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
09.07.2016, 17:06
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вполне.
Ну вряд ли. Так мы получаем очень серьезный оверхед по производительности, не говоря уже о том, что кое-где выделение памяти крайне не приветствуется (embedded).

Цитата Сообщение от IGPIGP Посмотреть сообщение
В случае со ссылкой этого сделать нельзя.
По-моему никаких проблем, взял и передал std::optional. И выразительнее, и удобнее, и безопаснее, нежели указатель.
http://en.cppreference.com/w/cpp/utility/optional
1
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
09.07.2016, 17:42
IGPIGP, ct0r, я лишь объяснил как принято в лучших домах Европы) и тот и другой подход разрешён языком. у каждого мысли свои скакуны
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.07.2016, 19:07
Цитата Сообщение от ct0r Посмотреть сообщение
Так мы получаем очень серьезный оверхед по производительности
В виде проверки указателя на ноль?
Цитата Сообщение от ct0r Посмотреть сообщение
, что кое-где выделение памяти крайне не приветствуется
Вопрос который задан, касается и этой возможности. В нём нет упоминаний о том, что приветствуется, а что нет. Массивы обрезаны только. Но вопрос ведь о сходстве и различиях технологий в языках с GC и без в данном контексте. А там, где есть коллектор, там нет проблем с приветствиями.
Цитата Сообщение от vxg Посмотреть сообщение
у каждого мысли свои скакуны
vxg, и-го-го.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.07.2016, 19:07
Помогаю со студенческими работами здесь

В matlab есть указатели на переменные или что-нибудь похожее на указатели?
Здравствуйте, в matlab есть указатели на переменные? или что-нибудь похожее на указатели? нужно хранить в объекте информацию: на...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Почему Лафоре использует указатели на указатели, вместо обмена значениями указателей?
Доброго времени суток! Задался теоретическим вопросом. Читал пример из книги Лафоре ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++,...

Используя нетипизированные указатели и указатели на подпрограммы обобщить сортировку пузырьком
Смысл задания в том, что нужно отсортировать массив структур из 3х полей по сумме координат есть структура struct XYZ{ ...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов?
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru