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

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

09.07.2016, 08:24. Показов 3430. Ответов 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
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.07.2016, 00:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ct0r Посмотреть сообщение
Вин10 тоже не будет работать на старых компах. Что это доказывает? Ничего.
А мы собрались что-то доказать?
Тут же есть вопрос:
Цитата Сообщение от O_Q Посмотреть сообщение
Если такие приёмы используются, приведите пример, где это целесообразно.
Какие аналоги применяются в таких языках как C#?
А мы где?
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
11.07.2016, 00:36
На правах дилетанта (мимо крокодил ) - я сразу после фразы "может вернуть а может и не вернуть" почуял неладное, и памятуя автора, подозревал что он про мэйбимонады... А тут еще гуру про "ван левел поинтер" процитировал... С++ как Майкл Джексон, с каждым новым релизом делает себе очередное обеление кожи и не хочет считаться наследником указательного языка, имхо. Несмотря на вынужденность обратной совместимости.
2
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
11.07.2016, 01:35
Ну как бы boost::optional как минимум с 2003 года существует (с boost 1.30).
Кому интересно как это реализовано, может почитать описание здесь (это самая старая версия справки, доступная на сайте).
However, it is particularly important to note that optional<> objects are not pointers. optional<> is not, and does not model, a pointer.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
11.07.2016, 06:38
ct0r, набор вырванных из контекста фраз - каждая является истиной но ни одна из них ни даже их сумма не является "используйте ссылки". Другого сложно было ждать от мукулатуроведа
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
11.07.2016, 09:40
Цитата Сообщение от vxg Посмотреть сообщение
набор вырванных из контекста фраз - каждая является истиной но ни одна из них ни даже их сумма не является "используйте ссылки".
Мы говорили в теме про контекст выбора ссылки или указателя при передаче и возврате параметров из функции. И тот документ, который я привел, расставляет все по местам. Всем очевидно, что ваш соскок выглядит смешно и по-детски
Я понимаю, что вам неохота выкидывать вашу книжку с догмами в корзину, читать всякие "сложные" вещи на английском, менять мышление, привыкать к новому стилю и все такое, - но это именно то, что разработчики ПО должны делать постоянно. Кто этого не умеет, тому не добиться успеха в профессии. Советую подумать об этом на досуге и проникнуться.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
11.07.2016, 15:00
ct0r, мда. вы не привели ни одной причины по которой использование ссылки при возврате через аргумент было бы полезнее использования указателя.
пример 1
C++
1
2
3
4
void f(cls &obj) {obj.val = 123;}
...
cls obj;
f(obj);
пример 2
C++
1
2
3
4
void f(cls * const obj) {obj->val = 123;}
...
cls x;
f(&x);
оба примера технически равны. если у вас нет религиозной аллергии на "&" и "->" вместо "." то нет никакой объективной причины сказать что один из примеров лучше.
----
F.17 говорит с нами голосом Капитана Очевидность - если вы хотите иметь in-out передавайте ссылку и помните что это источник ошибок так как объект может быть изменен - возможности ссылок и так понятны любому кто имеет представление о языке. данный пункт тут не подходит.
F.20 и F.21 вообще касаются возвращаемых значений - здесь так же любому знакомому с предметом должно быть ясно что возврат лучше делать естественным для функции образом через результат, а не через аргумент.
F.60 указывает нам на полезность использования указателей если по условиям задачи мы можем возвращать NULL.
F.42 указывает вообще на какие-то дошкольные понятия о недопустимости возврата адресов локальных объектов. во всяком случае лучше я этот пункт понять не смог, если вы смогли - объясните.
подводя итог: этот набор F больше подходит для азбуки, а не для практического руководства. год выпуска, автор и язык оригинала не влияют на суть - надо не просто читать - нужно понимать что вы читаете.
----
в той книге которую вы совсем не по делу осмеиваете и которая как раз является набором правил выработанных при практическом применении языка я встретил такой вот прием: выбирайте пример 2 так как "&" сигнализирует читающему код о том что передаваемый объект может быть изменен. и не важно какая среда разработки - работает над кодом все равно человек - да, он может воспользоваться контекстной всплывающей подсказкой отображающей сигнатуру метода или просто может знать о том что по документации данная функция может изменять объект, но... он всего лишь человек. продвинутая среда разработки и высокая квалификация не делает из него супермена. возможности разработчика держать в голове всю картину не безграничны. функций может быть много. документации может быть еще больше. времени для просмотра подсказок может не быть вовсе. если этот самый "&" позволит человеку сразу получить достаточно важную для работы с кодом информацию, то это благо (даже если это 1% случаев - зачем упускать этот шанс?). именно этим второй пример отличается от первого. именно по этому при всем техническом равенстве обоих примеров мне кажется по возможности стоит отдавать предпочтение второму.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
11.07.2016, 15:32
vxg
Хватит пороть чушь!
swap уже много лет существует в стандарте, и никто не говорит, что это так неудобно, передавать объекты по ссылке, вместо указателя. Не говоря уже о том, что & просто может быть перегружен и что по указателю можно передать NULL.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
11.07.2016, 16:54
mporro, чушь тут порите вы начиная от хаха про индийских программеров и заканчивая перегрузкой & - ни один нормальный разработчик не будет модифицировать операторы таким образом что бы кардинально поменять их смысловую нагрузку
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
11.07.2016, 17:18
vxg
Вам уже всё разжевали и в рот положили.
Все используют ссылки и никому в голову не приходило, что это, видите-ли страшно неудобно!
И нигде в таблице Герба Саттера в качестве принимаемого параметра нет указателя.
https://www.youtube.com/watch?... .be&t=3454

Если Вы не умеете использовать С++ -- это ваши личные трудности. Но транслировать свою глупость окружающим -- это перебор!
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
11.07.2016, 17:20
mporro, никто не говорит что это страшно неудобно - если вы не умеете использовать глаза это ваши трудности
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
11.07.2016, 17:25
Цитата Сообщение от vxg Посмотреть сообщение
кардинально поменять их смысловую нагрузку
Что значит "кардинально"?
Вполне логично, например, возвратить при операции взятия адреса указатель на какую-то память, которую класс абстрагирует. Точно также, как вполне логично перегрузить разыменование для умного указателя.
Вот только это будут другие адреса и другие разыменования, хотя с точки зрения бизнес-логики они будут идеально осмыслены.

Добавлено через 3 минуты
Цитата Сообщение от vxg Посмотреть сообщение
никто не говорит что это страшно неудобно
Вы же оправдываете указатели тем, что они удобнее ссылок! Ведь вредные ссылки ужасно неудобны именно тем, что по ним ничего не видно. А вот по указателю всё ясно!
Так почему же не используют в swap указатели?! Как же так? Они же удобнее!
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
11.07.2016, 17:28
mporro, результат применения перегруженного оператора к объекту в идеале не должен отличаться от того что было бы если бы вы применили этот оператор к обычному типу если подобные аналогии вообще существуют. то есть не нужно перегружать умножение для суммирования или делать еще какую нибудь ересь вроде того что вы описали

Добавлено через 1 минуту
Цитата Сообщение от mporro Посмотреть сообщение
Вы же оправдываете указатели тем, что они удобнее ссылок!
протрите глаза - я нигде не оправдываю ничего. я показал вам два технически одинаковых примера и объяснил почему я согласен с тем что при равенстве этих примеров предпочтительнее пользоваться вторым. про неудобство нигде ни слова.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.07.2016, 17:50
Цитата Сообщение от mporro Посмотреть сообщение
Не говоря уже о том, что ... по указателю можно передать NULL
Да. И тут указатель более гибок. В С++ нельзя передать неинициализированную ссылку. В C# можно. Поэтому TC и спрашивает о том, где аналогии. В языках, где ссылки могут создаваться без инициализации, они в данном смысле ближе к указателям. Если о аналогиях говорить.
1
11.07.2016, 17:53

Не по теме:

IGPIGP, на третьей (!) странице обсуждения хоть кто-то вспомнил о ТС :D

0
11.07.2016, 18:00

Не по теме:

Цитата Сообщение от 0x90h Посмотреть сообщение
хоть кто-то вспомнил о ТС
0x90h, вверху страницы тоже есть попытка. Но тоже ушло по значению. Скопировалось, мелькнуло и удалилось. :yes:

0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
11.07.2016, 18:14
Цитата Сообщение от IGPIGP Посмотреть сообщение
В С++ нельзя передать неинициализированную ссылку.
Что сказать.
Конечно, указатели ближе к С#-ссылкам. ТС также хочет знать, где эти указатели использовать. И хороший ответ -- нигде. За исключением, возможно, умных указателей, если есть накладные расходы на heap. О чём и рассказывает Саттер.

То, что ссылки C# могут быть NULL, скорее плохо, чем хорошо.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
11.07.2016, 19:07
Достали, ребят. Вот Вам вариант:
C++
1
2
3
4
5
6
7
void foo(int *p){
   *p = 10;
}
 
void foo( int &p){
   p = 10;
}
и используйте что хотите
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
11.07.2016, 19:42
Croessmah, было, см Используются ли на практике указатели на указатели объектов?
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
11.07.2016, 19:45
Цитата Сообщение от vxg Посмотреть сообщение
подводя итог: этот набор F больше подходит для азбуки
Которую сперва надо осилить.

Цитата Сообщение от vxg Посмотреть сообщение
надо не просто читать - нужно понимать что вы читаете.
Именно. И у вас с этим не все гладко, судя по комментариям к F.xx.

Цитата Сообщение от vxg Посмотреть сообщение
оба примера технически равны.
Даже если я nullptr передам?

Копнем чуть глубже.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void f1(char* out) {
  // ...
}
 
void f2(char* out) {
  // ...
  f1(???); // как вызываем? так что-ли - f1(&*out)??
  // ...
}
 
int main() {
  char c;
  f2(&c);
}
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
11.07.2016, 19:47
ct0r, если вы не поняли то уже не поймёте не напрягайте то место в которое вы еду проталкиваете
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2016, 19:47
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Закрытая тема Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через 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
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru