|
28 / 24 / 0
Регистрация: 03.02.2010
Сообщений: 66
|
||||||
Способы создания объектов и арифметика указателей11.09.2010, 09:49. Показов 3902. Ответов 13
Метки нет (Все метки)
Вот сам код:
Я страх как не хочу видеть в коде ссылочные типы на объект и уж тем более очень не хочется видеть выражения вида (*a)[0]. Опять же не очень хочется делать некий абстрактный класс для сокрытия арифметики указателей( да и можно ли такое сделать в данном случае? ), да и не знаю как. Как можно данную проблему решить и что не так у меня в классах, может быть я где то допустил ошибку? Так же интересует чем различаются данные способы создания объектов: List* a=new List(0); List b(0); Я так понимаю первый живет ровно до тех пор пока на него ссылается хотя бы один указатель, а вот второй это просто напросто ссылка на объект? Первый не умрет если на него будет что либо ссылается, а вот второй умрет сразу после выхода из области видимости? PS: Меня так же посещала мысль сделать из этого класса функтор, это конечно решит проблему но выглядит как то уж криво слишком, с таким же успехом можно будет и обычную функцию использовать. Хочется настоящей неподдельной инкапсуляции, так что б тип данным выглядел взаправдашним
0
|
||||||
| 11.09.2010, 09:49 | |
|
Ответы с готовыми решениями:
13
Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? Арифметика указателей арифметика указателей |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 11.09.2010, 10:47 | |
|
Ivan_32, List* a=new List(0); живет пока не будет очищена память оператором delete.
List b(0); до конца области видимости.
1
|
|
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||||||
| 11.09.2010, 10:58 | ||||||
|
Неправильные у вас тут мысли. Первый живёт ровно до тех пор, пока его не удалят. Если его адрес потеряется, удалить его будет невозможно и он так и будет висеть в памяти мёртвым грузом, это называется утечкой памяти. Если его удалить, но сохранить адрес и потом им воспользоваться, это тоже очень неприятная ошибка.
Второй будет существовать в пределах области, в которой определён:
1
|
||||||
|
28 / 24 / 0
Регистрация: 03.02.2010
Сообщений: 66
|
|
| 11.09.2010, 11:07 [ТС] | |
|
В который раз убеждаюсь что на самые простые вопросы отвечают наиболее развернуто
Тем не менее, оставалась проблема с этой конструкцией: (*a)[0]; Решил в меру уродливым способом: List& a= * new List(0);
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 11.09.2010, 11:12 | |
|
Ivan_32, А для чего именно такое объявление?
List& t=(*a); Зачем ссылка на число которое хранится по адресу a?
0
|
|
|
28 / 24 / 0
Регистрация: 03.02.2010
Сообщений: 66
|
|
| 11.09.2010, 11:17 [ТС] | |
|
Это что бы не писать (*a)[0], а писать t[0]. Тут смысл в том что без обращения по значению [] воспринимается как тот же *, то есть косвенное обращение, ну и естественно ни о каком операторе речи и не идет. С этим и воюю. Жаль нельзя сделать перегрузку [] именно для List*. Хотя наверно если подумать можно сделать класс указателя на класс List и в нем уже что то шаманить.
0
|
|
|
|
|||||||
| 12.09.2010, 00:41 | |||||||
|
Ivan_32,
И ещё: вы ведь знаете, почему в std::list нет оператора [] ? Добавлено через 3 минуты А ещё
1
|
|||||||
|
28 / 24 / 0
Регистрация: 03.02.2010
Сообщений: 66
|
|
| 14.09.2010, 00:05 [ТС] | |
|
Вот теперь это становится понятным. Значит это просто технически невозможно, раз даже в STL-контейнере такой фичи нет. Спасибо всем.
0
|
|
|
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
|
|
| 14.09.2010, 00:10 | |
|
Что значит технически невозможно? Скорее синтаксически невозможно... Пользуйтесь своим вариантом с лишней ссылкой, ничего плохого в нем вроде нет.
А оператора [] в STL'ском list'е нет видимо потому что список не поддерживает произвольного доступа, только последовательный, поэтому не стали включать в интерфейс внешне простую операцию, работающую на самом деле медленно.
0
|
|
|
|
|
| 14.09.2010, 00:13 | |
|
Ребята, уточняйте вопрос, по к-рому идёт дисскусия.
Переопределить operator[] для типа Object* (т.е. для указателя на объект класса) действительно нельзя.
1
|
|
| 14.09.2010, 00:18 | |
|
0
|
|
|
|
|
| 14.09.2010, 00:20 | |
|
0
|
|
|
|
||
| 14.09.2010, 00:26 | ||
|
По поводу operator[] для списка - конечно бред. Хотя указатель может указывать например на массив списков.
0
|
||
| 14.09.2010, 00:26 | |
|
Помогаю со студенческими работами здесь
14
Индексация массивов, арифметика указателей Арифметика указателей (указатель на void*) Как работает арифметика указателей, память массивов Замена максимального элемента массива на среднее арифметическое (арифметика указателей) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|