С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
#1

Общий параметр для всех классов и создание объекта по известному адресу - C++

13.07.2014, 21:33. Просмотров 432. Ответов 5
Метки нет (Все метки)

Разработайте и реализуйте класс counted_ptr<T>, владеющий указателем на
объект типа T, и указатель, подсчитывающий количество ссылок (переменная
типа int), общий для всех указателей, с подсчетом ссылок на один и тот же
объект типа T. Счетчик ссылок должен содержать количество указателей, ссылающихся на данный объект типа т. Конструктор класса counted_ptr должен размещать в свободной памяти объект типа T и счетчик ссылок. Присвойте объекту класса counted_ptr начальное значение типа T. После уничтожения последнего объекта класса countedptr для класса T его деструктор должен удалить объект класса T.
Предусмотрите в классе counted_ptr операции, позволяющие использовать его как указатель.
Вообщем есть задание.

Скажу сразу, вся реализация для меня понятна, за исключением одного момента.
Поидее, мне нужен счётчик, который будет знать, количество указателей на стандартный объект - например int, double и т.д.
Проблема в том, что мне нужно обойтись без паттерна Наблюдателя и я смог придумать лишь один из способов:

Создать объект счётчика по известному адресу в памяти, при этом, адрес будет неизменен, если неизменен адрес элемента, на который встаёт мой counted_ptr.

Тут сообственно вопрос:
Можно ли так сделать и как создать объект по нужному мне адресу памяти (тем более нужно узнать свободен ли он)?
Либо, пожалуйста, предложите что-нибудь поумнее, если у вас есть какой-нибудь простой паттерн на такой случай.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2014, 21:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Общий параметр для всех классов и создание объекта по известному адресу (C++):

Необходим общий private static-член для всех классов, сгенерированных по шаблону - C++
Здравствуйте! Мне необходим общий private static-член для всех классов, сгенерированных по шаблону, и при этом, не хочется засорять...

Выделение памяти по известному адресу - C++
Всем привет. Вопрос сообственно в заголовке темы. Как выделить память по нужному мне адресу, например: Я хочу выделить память n*...

Чтение и запись значения по известному адресу - C++
Нужно реализовать чтение и запись переменной по адресу. Конкретно: есть флеш-игра, есть программа Cheat Engine, и есть значение в этой...

Получение данных по известному адресу в памяти - C++ Builder
Доброго времени суток, уважаемые! В первую очередь хочу поздравить всех с днем программиста!!! А во вторую..:-| Есть функция: ...

Как считать данные по известному адресу? - FASM
Как считать данные по адресу 0x000FCD40? Почитав статьи должно вроде как быть так? mov edx, 000FCD40h а как вывести содержимое регистра...

Общий progressbar для всех загрузок - C# WPF
Добрый день, Ситуация следующая: 1. имеется три кнопки при нажатии на которые загружается три картинки из интернета. 2. имеется...

5
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6519 / 3156 / 309
Регистрация: 04.12.2011
Сообщений: 8,726
Записей в блоге: 5
13.07.2014, 21:47 #2
Цитата Сообщение от kordax Посмотреть сообщение
без паттерна Наблюдателя
но если создаётся счётчик, то наблюдать всё равно придётся?
Цитата Сообщение от kordax Посмотреть сообщение
Создать объект счётчика по известному адресу в памяти
Где будете хранить адрес такого объекта для указателя ptr<> с определённым значением (обекта ptr)? Если в самом объекте ptr, то не лучше ли счётчик разместить вместо этого?
0
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
13.07.2014, 21:50  [ТС] #3
Если в самом объекте ptr, то не лучше ли счётчик разместить вместо этого?
Можете уточнить? К сожалению не понял что имели ввиду.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
13.07.2014, 22:58 #4
наблюдатели? зачем тут наблюдатели? я так понял нужен аналог shared_ptr'а, посмотри как он реализован
0
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
13.07.2014, 23:03  [ТС] #5
На форуме тут кидали реализацию, вот ссылка (вдруг кто читает мой топик с похожим вопросом):
http://ideone.com/J3YYC4
Но там блин без шаблонов и свой объект делается, мне такого не нужно.

Тогда ещё вопрос остался из моих первых.
Как создать объект в заранее нужном адресе памяти и как узнать, свободен ли он?
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.07.2014, 23:08 #6
Цитата Сообщение от kordax Посмотреть сообщение
Как создать объект в заранее нужном адресе памяти и как узнать
placement new

Цитата Сообщение от kordax Посмотреть сообщение
и как узнать, свободен ли он?
это уже ваша забота, знать адреса, размеры участков и их занятость/свободность
1
13.07.2014, 23:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2014, 23:08
Привет! Вот еще темы с ответами:

Общий обработчик для всех страниц - C# ASP.NET
Добрый день. Еесть вот такой участок кода protected override void OnPreInit(EventArgs e) { ...

Нужно открыть общий доступ к серверу 1С только для бухгалтерии, а для всех остальных, закрыть его. - Администрирование Windows
Всем здравствуйте. Имеется такая конфигурация: DC сервер - Доменный сервер в который заведены все учетки пользователей входящих в...

настроить общий доступ по MAC адресу - Администрирование Windows
нужно настроить общий доступ по сети к 2 папкам. К одной имеют все доступ, ко второй только список компьютеров из MAC списка. ( создание...

Подскажите программу для создание файла по определённому адресу - Windows
Доброго дня\вечера или утра, кому как. Собственно проблема не новая и опишу её суть. Торрент наделал на жестком диске 3 места...


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

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

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