13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
Фабричный метод и RAII15.12.2019, 23:14. Показов 2548. Ответов 13
Метки нет Все метки)
(
У меня возник вопрос, как реализовать фабричный метод чтобы он соответствовал идиомы raii. Кто в данном случае является ответственным за создание обекта: сам метод или тот кто его взывает ?
0
|
15.12.2019, 23:14 | |
Ответы с готовыми решениями:
13
Шаблон RAII замены указателя на функцию
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
|
16.12.2019, 01:27 | |
Фабричный метод берет на себя обязанности по созданию RAII обекта. Клиентский код им пользуеться и по выходу этого обекта из своего скоупа он уничтожаеться (освобождает выделенную под себя память, ресурсы и т. п.).
0
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
16.12.2019, 01:38 [ТС] | ||
1)С помощью свитча 2)С помощью фабрик на основе синглтона Майерса В певом случае мы должны создать в классе фабричного метода метод для освобожени ресурса и свой вариант умного указателя (scoped-ptr) Во втором случае тоже самое. Это всё дикий оверхэд. Самое разумное тогда делать гибрид фабричного метода и прототипа. Фабрика генерирует объекты и сохранет указатели на них в std::set А в деструкторе фабрики мы проходя по std::set <Class*> удалим все объекты, но это не чистый фабричный метод.
0
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
||
16.12.2019, 01:46 | ||
0
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
||
16.12.2019, 01:59 | ||
unique_ptr , возвращенный фабрикой, зразу же присваивать shared_ptr , если нужно его совместное использование.
0
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
16.12.2019, 02:07 [ТС] | ||
А с std::move немного теряется идея фабричного метода (абстракция от процесса создания)
0
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
|||||||
16.12.2019, 02:17 | |||||||
0
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
||
16.12.2019, 02:28 | ||
1
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||
16.12.2019, 04:31 [ТС] | |||
Добавлено через 3 минуты Странно, но QMAKE_CXXFLAGS += -fno-elide-constructors не останавливает. Добавлено через 45 минут Мне казалось я знаю всё, но вы меня разубедили и щас голова пухнет от того как всё нетривиально. Пока нарыл https://en.cppreference.com/w/... py_elision и мне тяжело соорентироваться где мой случай. Тут ещё работает какойто механизм автовыбора между копированием и перемещением. Буду благодарен если объясните на пальцах. Добавлено через 1 час 11 минут Всё, спасибо, нашёл книгу.
0
|
19458 / 10070 / 2452
Регистрация: 30.01.2014
Сообщений: 17,751
|
|||
16.12.2019, 09:14 | |||
Представьте, что вы строите дом. Вы можете его построить с использованием гвоздей или шурупов и досок, скоб, срубить его топором из бревен, выложить из кирпича и т.д. По разному построенный дом - это все равно дом. Идея дома не теряется от того, как именно вы его строите. Идея дома - это абстракция гораздо более высокого порядка, чем гвозди. В данном случае std::move - это всего лишь гвоздь, или что-то около того.
0
|
![]() ![]() 8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.12.2019, 13:41 | |
0
|
16.12.2019, 13:41 | |
Помогаю со студенческими работами здесь
14
DLL, RAII для интерфеса Фабричный метод Паттерн фабричный метод Фабричный метод и паттерн фабрика
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Реализация многопоточных сетевых серверов на Python
py-thonny 16.05.2025
Когда сталкиваешься с необходимостью писать высоконагруженные сетевые сервисы, выбор технологии имеет критическое значение. Python, со своей элегантностью и высоким уровнем абстракции, может. . .
|
C# и IoT: разработка Edge приложений с .NET и Azure IoT
UnmanagedCoder 16.05.2025
Мир меняется прямо на наших глазах, и интернет вещей (IoT) — один из главных катализаторов этих перемен. Если всего десять лет назад концепция "умных" устройств вызывала скептические улыбки, то. . .
|
Гибридные квантово-классические вычисления: Примеры оптимизации
EggHead 16.05.2025
Гибридные квантово-классические вычисления — это настоящий прорыв в подходах к решению сложнейших вычислительных задач. Представьте себе союз двух разных миров: классические компьютеры, с их. . .
|
Использование вебсокетов в приложениях Java с Netty
Javaican 16.05.2025
HTTP, краеугольный камень интернета, изначально был спроектирован для передачи гипертекста с минимальной интерактивностью. Его главный недостаток в контексте современных приложений — это. . .
|
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
|
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
|
Настройка гиперпараметров с помощью Grid Search и Random Search в Python
AI_Generated 15.05.2025
В машинном обучении существует фундаментальное разделение между параметрами и гиперпараметрами моделей. Если параметры – это те величины, которые алгоритм "изучает" непосредственно из данных (веса. . .
|
Сериализация и десериализация данных на Python
py-thonny 15.05.2025
Сериализация — это своего рода "замораживание" объектов. Вы берёте живой, динамический объект из памяти и превращаете его в статичную строку или поток байтов. А десериализация выполняет обратный. . .
|
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
|
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
|