Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 1 / 1
Регистрация: 22.12.2019
Сообщений: 87
1

Указатели и allocator

16.05.2020, 10:02. Показов 960. Ответов 6

Здравствуйте. Не так давно начал изучать с++. Возник такой вопрос. Допустим у нас есть массив указателей на что-то. shared_ptr<int>, а сам массив это unique_ptr<shared_ptr<int>[]>- это и есть указатель на массив.
Когда мы будем использовать myAllocator.allocate(count) для выделения памяти по массив, например при копировании, Нам нужно еще сконструировать обьекты в сырой памяти. Хорошо.
Мы пишем myAllocator.construct(&object.myArray[i], copied.myArray[i]).
1 вопрос: Что происходит, когда мы берем адрес от указателя? Мы получаем адрес непосредственно указателя и по нему конструируем обьект ?
2 В качестве второго аргумента правильно ли брать так указатель ? Правильный ли второй аргумент ? Мы же должны сделать по сути второй shared_ptr
Заранее спасибо за ответы.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2020, 10:02
Ответы с готовыми решениями:

Распределитель памяти идентичный std::allocator. Непонятные синтаксис и концепция std::allocator::construct
Компилятор: MSVC 2010 Exress код моего класса распределяющего память под спойлером #include...

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

allocator
Здорова! Есть задачка:&quot;Завершите или реализуйте с самого начала Pool_alloc (параграф 19.4.2) так,...

Ошибка с allocator
Приветствую. Пользуюсь Dev-C++. При выполнении кода, ошибка, что на скрине. #include...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
6
С чаем беда...
Эксперт CЭксперт С++
8630 / 4306 / 1184
Регистрация: 18.10.2014
Сообщений: 9,352
16.05.2020, 10:10 2
Цитата Сообщение от Novichekk Посмотреть сообщение
Мы пишем myAllocator.construct(&object.myArray[i], copied.myArray[i])
Что такое object? Что такое object.myArray?
1
2 / 1 / 1
Регистрация: 22.12.2019
Сообщений: 87
16.05.2020, 10:41  [ТС] 3
Ошибка . Просто myAllocator.construct(&myArray[i], copied.myArray[i]).
myArray - указатель на массив

Добавлено через 25 минут
TheCalligrapher, пишу что-то вроде вектора
0
Комп_Оратор)
Эксперт по математике/физике
8662 / 4375 / 595
Регистрация: 04.12.2011
Сообщений: 13,088
Записей в блоге: 16
16.05.2020, 11:22 4
Лучший ответ Сообщение было отмечено Novichekk как решение

Решение

Novichekk, вы правы, unique_ptr может управлять блоком памяти в куче. То есть, он не использует аллокатор вообще если не считать оператор new. Ему можно из кастомного, предоставить лишь deleter.
Кроме всего - идея сделать разделяемый указатель элементом массива, как по мне не очень. Не лучше ли список? Массив это сильная форма владения позволяющая рассчитывать на последовательное размещение (всё в одном кеше, если повезёт). За это расплатой - его неповоротливость. А умные указатели размещают где захотят.
Можно делать списки. Списки списков. Списки итераторов списков. У меня в блоге есть классик с витиеватой контейнерной структурой где конечными элементами владеет один общий список. А доступ можно организовать через 2-х ярусные надстройки из контейнеров vector<Node<size_t, list<T>::iterator> и list< list<T>::iterator> элементы которых указывают на общее (как уже сказано) хранилище list<T>.
Это вот тут:
https://www.cyberforum.ru/blog... g4772.html
Я это сказал, чтобы показать альтернативу разделяемого владения без головной боли с управлением памятью. Контейнеры всё умеют делать сами. Почти всё. То есть, нужна серьёзная причина руками лезть туда, где режущий инструмент)
1
2 / 1 / 1
Регистрация: 22.12.2019
Сообщений: 87
16.05.2020, 17:02  [ТС] 5
IGPIGP, Понял, спасибо
0
Комп_Оратор)
Эксперт по математике/физике
8662 / 4375 / 595
Регистрация: 04.12.2011
Сообщений: 13,088
Записей в блоге: 16
16.05.2020, 17:07 6
Цитата Сообщение от Novichekk Посмотреть сообщение
IGPIGP, Понял, спасибо
Рад помочь умному человеку
0
С чаем беда...
Эксперт CЭксперт С++
8630 / 4306 / 1184
Регистрация: 18.10.2014
Сообщений: 9,352
16.05.2020, 19:21 7
Цитата Сообщение от Novichekk Посмотреть сообщение
myArray - указатель на массив
Что вы имеет в виду под "указателем"? У вас в исходном сообщении "указателями" называются unique_ptr и shared_ptr. Это на самом деле никакие не "указатели", а нетривиальные объекты, которые мы называем "указателями" лишь условно, в разговорной речи.

Какая связь между вашими myAllocator.allocate(count) и myAllocator.construct(&object.myArray[i], copied.myArray[i])? Приведите, может, хоть пример кода.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2020, 19:21

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Allocator и shared_ptr
Прокомментируйте пожалуйста. Есть ли смысл и вообще возможность оформлять зарезервированную память...

std::allocator
Здравствуйте! Подскажите почему возникает ошибка сегментирования: using std::cout; using...

std::allocator
я не смог найти хорошего описания роботы с аллокатором, так что спрашиваю у тех, кто с ним работал...

Custom Allocator
Здравствуйте Понадобился кастомный аллокатор чтобы не вызывать new/delete на каждый чих. Вот...

allocator своя версия
Доброго времени суток. Мне нужно написать class allocator на подобии стандартного. Он должен...

Что такое allocator
Доброго всем времени суток. Искал свой вопрос в сети но русскоязычной инфы мало.... Может кто что...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.