|
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
|
|||||||||||
Проверить правильность реализации умного указателя19.10.2016, 00:57. Показов 1581. Ответов 8
Метки нет (Все метки)
?
0
|
|||||||||||
| 19.10.2016, 00:57 | |
|
Ответы с готовыми решениями:
8
Проверить правильность преобразования указателя - преобразование из void* Проверить правильность реализации метода Ньютона Реализация умного указателя |
|
Неэпический
|
|||||||||||||||||
| 19.10.2016, 01:07 | |||||||||||||||||
Вы думаете когда-то это унаследовать? то реализуйте перемещение, а копирование вообще уберите.
Но с отказом от владения? ![]()
![]() Надо бы определиться, что Вы хотите от этого класса, здесь всякого намешано.
2
|
|||||||||||||||||
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,813
|
||
| 19.10.2016, 09:44 | ||
|
Этот конструктор при использовании даст ошибку компиляции. Т.к. функция release и по объявлению и по семантике неконстантная, а ссылка на константный объект. Ошибки в примере нет только потому, что этот конструктор нигде не используется. При этом семантическое предназначение такого конструктора - копирование, хотя по факту выполняется перемещение. В таком случае лучше, при наличии С++11, это самое перемещение и реализовать (как уже было сказано выше).
0
|
||
|
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
|
|||||||||
| 20.10.2016, 00:01 [ТС] | |||||||||
|
1.Указываемые объекты должны создаваться указателями в конструкторах. 2. Деструктор указателя должен удалять указываемый объект. 3. Конструктор копий должен создавать точную копию указываемого объекта. 4. Оператор присваивания operator= должен удалять текущий указываемый объект, находящийся слева от него, и заменять его копией указываемого объекта справа.
0
|
|||||||||
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,813
|
||||||||||||||
| 20.10.2016, 00:21 | ||||||||||||||
|
nofx, вот с таким примером собери свой код:
У тебя в коде объявлен конструктор копирования, который пытается делать перемещение. Это не то же самое, что конструктор перемещения. Добавлено через 13 минут По мелочи: std::runtime_error тут в помощь.Есть еще, но это после утряски вопроса с конструктором.
1
|
||||||||||||||
|
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
|
|||||||
| 20.10.2016, 00:30 [ТС] | |||||||
|
Да, понял.
0
|
|||||||
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,813
|
||
| 20.10.2016, 00:36 | ||
|
В общем, если цель научиться делать правильно, то сейчас надо пойти и почитать про rvalue-reference и move-semantics. Ну или про трюки для обхода ограничений С++03, которые применялись в auto_ptr. Если же цель заставить это работать на одном конкретном компиляторе, то можно на этом остановиться
1
|
||
|
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
|
|||||||
| 20.10.2016, 00:51 [ТС] | |||||||
|
По Вашей ссылке это код в самом низу:
0
|
|||||||
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,813
|
|
| 20.10.2016, 01:08 | |
Сообщение было отмечено nofx как решение
Решение
nofx, по ссылке показан костыль, который очень долго был законным способом передавать владение в таких случаях. Сейчас лучше пользоваться средствами С++11, если это возможно.
Суть костыля в том, что мы не можем использовать конструктор копирования для передачи владения в общем случае. Мы можем его использовать, если мы передаем владение от lvalue, но в случае с rvalue правила языка не позволят привязать его к неконстантной ссылке. Раз это невозможно, то необходимо было обеспечить другой путь. Этот путь заключается в неявном преобразовании auto_ptr в auto_ptr_ref (operator auto_ptr_ref) и затем вызов соответствующего конструктора (auto_ptr(auto_ptr_ref<T> rhs)). Что позволяло отнять владение у rvalue и передать его новоиспеченному объекту. С присваиванием rvalue ситуация аналогичная.
1
|
|
| 20.10.2016, 01:08 | |
|
Помогаю со студенческими работами здесь
9
Использование умного указателя std::weak_ptr
Не выводится сообшения от деструктора для умного указателя
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|