Russian Qt Forum
Ноябрь 22, 2024, 12:51
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
QScopedPointer
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QScopedPointer (Прочитано 14074 раз)
kamre
Частый гость
Offline
Сообщений: 233
Re: QScopedPointer
«
Ответ #15 :
Октябрь 18, 2018, 19:15 »
Цитата: Igors от Октябрь 18, 2018, 12:10
Ну вот есть "просто член класса", агрегатом, не указатель - он почему-то прекрасно копируется. Интуитивно QScopedPointer - такой же член, который однако может быть и null. И что с того - почему он не копируется? Чему это противоречит? Оригинал владеет своим экземпляром, копия - своим, "уникальность" соблюдена.
Для "такой же член, который однако может быть и null" достаточно std::optional, зачем какие-то умные указатели нужны?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QScopedPointer
«
Ответ #16 :
Октябрь 19, 2018, 08:49 »
Цитата: ViTech от Октябрь 18, 2018, 12:33
Т.е. Вы сами всё знаете. Отлично
.
...
Напишите про это в комитет по стандартизации С++, а то "мужики-то не знают"
.
Вы не замечали что люди, поначалу весьма активно спрашивающие, затем покидают форум? Думаю потому что как "источник знаний" (или "живой букварь") любой форум малоэффективен. Хотя бы эта тема - ну вряд ли кто-то из присутствующих чего-то "не знал"
Но интересны не "знания" (которые проще почерпнуть из справочника), а мысли и оценки - какое решение оптимально в данной ситуации и почему? А Вы шпарите "по книжке"
Цитата: kamre от Октябрь 18, 2018, 19:15
Для "такой же член, который однако может быть и null" достаточно std::optional, зачем какие-то умные указатели нужны?
Разумно, но эта замена не эквивалентна. Напр QScopedPointer может указывать на полиморфный тип. Вообще чисто технически "выйгрышь" от него невелик - подумашь, сэкономил строчку в деструкторе, по сути и все. Правда есть ценная возможность swap - ну это редко. Главное что объявив QScopedPointer я четко заявляю "владение", это вносит ясность которой "просто указатель" не имеет.
Цитата: ssoft от Октябрь 18, 2018, 14:41
Почему велик-то? В программе же объявляются типы для хранения данных и формирования нужного поведения.
Это такой же пользовательский тип, как и все другие. Назовите его не указателем (тем более, что желаемая сущность им и не является), а HeapInstance или HeapOptional, например.
Я назвал CDeepPointer, сделал ро образцу ::any c помощью Вашей и
_Bers
(спасибо товарищам). К сожалению, проблемы "легализации" или "статуса" довольно болезненны. Поэтому в основном все равно используются решения которые, на мой взгляд, объективно хуже, но стандартны и поэтому всем понятны. Напр в данном случае - перекрыть конструктор копирования, что бывает не так уж тривиально (см замечание про полиморфный тип)
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: QScopedPointer
«
Ответ #17 :
Октябрь 19, 2018, 10:58 »
Цитата: Igors от Октябрь 19, 2018, 08:49
Главное что объявив QScopedPointer я четко заявляю "владение", это вносит ясность которой "просто указатель" не имеет.
QScopedPointer - не является контейнером, а является указателем (ассоциативной связью). А точнее, является уникальным указателем на экземпляр объекта (отсюда и все запреты на копирование и т.п.).
"Владение" в данном случае - это побочный эффект, связанный с необходимостью управлять временем жизни экземпляра объекта, чтобы не было утечек памяти.
При неограниченных ресурсах такой указатель мог бы и не "владеть" экземпляром.
А вот для контейнера (композитного агрегатора) "владение" является неотъемлемой частью его сущности.
Так как агрегация - это частный случай ассоциации, то она может быть реализована на основе любого вида указателей (raw, unique/scoped, shared и т.п.).
Цитата: Igors от Октябрь 19, 2018, 08:49
Я назвал CDeepPointer, сделал ро образцу ::any c помощью Вашей и
_Bers
(спасибо товарищам).
Ну и правильно
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: QScopedPointer
«
Ответ #18 :
Октябрь 19, 2018, 11:29 »
Цитата: Igors от Октябрь 19, 2018, 08:49
Но интересны не "знания" (которые проще почерпнуть из справочника), а мысли и оценки - какое решение оптимально в данной ситуации и почему?
Отличный заряд бодрости до конца дня. Спасибо! Эта фраза, произнесённая Вашими устами, звучит особенно пикантно. Ведь все Ваши темы начинаются с сообщения, в котором детальнейшим образом описаны поставленная задача, конкретная ситуация и критерии оптимальности. А название темы подобрано так кратко и ёмко, что уже только по нему можно предложить оптимальное решение.
Цитата: Igors от Октябрь 19, 2018, 08:49
Я назвал CDeepPointer, сделал ро образцу ::any c помощью Вашей и
_Bers
(спасибо товарищам).
Робкий вопрос из зала: "А это разве не велосипед?". Ведь:
Цитата: Igors от Октябрь 18, 2018, 08:30
Но тут эффект что я не раз наблюдал: нужно именно "стандартный" (вумный) указатель, хочет человек или нет, а справочник откроет, жизнь заставит. А "велик" может быть самый распрекрасный, но.. другим-то надо в него вникать, да еще и с нуля и без доки, это вызывает недовольство.
В CDeepPointer вникать не надо, он вызывает довольство?
Записан
Пока сам не сделаешь...
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QScopedPointer
«
Ответ #19 :
Октябрь 19, 2018, 15:01 »
Цитата: ViTech от Октябрь 19, 2018, 11:29
Ведь все Ваши темы начинаются с сообщения, в котором детальнейшим образом описаны поставленная задача, конкретная ситуация и критерии оптимальности. А название темы подобрано так кратко и ёмко, что уже только по нему можно предложить оптимальное решение.
Дв, "краткость - сестра таланта"
Цитата: Igors от Октябрь 19, 2018, 08:49
Робкий вопрос из зала: "А это разве не велосипед?".
...
В CDeepPointer вникать не надо, он вызывает довольство?
Точно так же как и Ваши творения
Как же Вы посмели (а ведь посмели) предложить свою собсную трактовку вумных указателей? Это что, выходит все что мы так добросовестно учили - оказывается вяло, блекло, маловыразительно, "сущностей" никак не выражает, да и вообще "бедно"? Та не может быть!!! Там же (в комитете?) такие вумные дядьки, они плюсы знают в 100 раз лучше! А этот крендель/чувак кто? Он че, такой умный? И.т.п. (уже с переходом на личности)
Это совершенно нормальная, естественная реакция на абсолютно ЛЮБУЮ самостоятельную мысль/решение. Человека можно понять, он "учил", тратил свое время и силы (читай - запоминал), признать что это "не совсем то" или хотя бы "всего лишь один шаг к истине" посильно немногим. Ну и объективные основания есть. Требовать знания std - вполне можно, а вот знания/понимания моих (Ваших, еще кого-то) личных наработок - нет. Все-таки программирование во многом технология/конвейер, и считаться с этим приходится
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: QScopedPointer
«
Ответ #20 :
Октябрь 19, 2018, 15:40 »
Цитата: Igors от Октябрь 19, 2018, 15:01
Дв, "краткость - сестра таланта"
Талантище тогда у Вас просто огроменного размера
.
Цитата: Igors от Октябрь 19, 2018, 15:01
Точно так же как и Ваши творения
Как же Вы посмели (а ведь посмели) предложить свою собсную трактовку вумных указателей? Это что, выходит все что мы так добросовестно учили - оказывается вяло, блекло, маловыразительно, "сущностей" никак не выражает, да и вообще "бедно"? Та не может быть!!! Там же (в комитете?) такие вумные дядьки, они плюсы знают в 100 раз лучше! А этот крендель/чувак кто? Он че, такой умный? И.т.п. (уже с переходом на личности)
Это совершенно нормальная, естественная реакция на абсолютно ЛЮБУЮ самостоятельную мысль/решение. Человека можно понять, он "учил", тратил свое время и силы (читай - запоминал), признать что это "не совсем то" или хотя бы "всего лишь один шаг к истине" посильно немногим. Ну и объективные основания есть. Требовать знания std - вполне можно, а вот знания/понимания моих (Ваших, еще кого-то) личных наработок - нет. Все-таки программирование во многом технология/конвейер, и считаться с этим приходится
К чему этот плач Ярославны?
Я говорил о том, что сначала Вы на предложение сделать класс с нужным поведением сетуете, что это велосипед, нужно вникать, вызывает недовольство, потом ровно такой велосипед и делаете. Непоследовательно как-то. Не ново и не интересно. Предложили бы какой-нибудь крышесносящий вариант, чтобы мы тут все о
х
...фигели
.
Записан
Пока сам не сделаешь...
kamre
Частый гость
Offline
Сообщений: 233
Re: QScopedPointer
«
Ответ #21 :
Октябрь 24, 2018, 12:07 »
Цитировать
Цитата: kamre от Октябрь 18, 2018, 19:15
Для "такой же член, который однако может быть и null" достаточно std::optional, зачем какие-то умные указатели нужны?
Разумно, но эта замена не эквивалентна. Напр QScopedPointer может указывать на полиморфный тип.
А как можно скопировать объект произвольного полиморфного типа, имея только указатель на базовый класс?
«
Последнее редактирование: Октябрь 24, 2018, 12:44 от kamre
»
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: QScopedPointer
«
Ответ #22 :
Октябрь 24, 2018, 12:37 »
Цитата: kamre от Октябрь 24, 2018, 12:07
А как можно скопировать объект произвольного полиморфного типа, имея только указатель на базовый класс?
Подобно, как это делает std::any со встроенной фабрикой.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QScopedPointer
«
Ответ #23 :
Октябрь 24, 2018, 12:39 »
Цитата: kamre от Октябрь 24, 2018, 12:07
А как можно скопировать объект произвольного полиморфного типа, имея только указатель на базовый класс?
Название не помню, но это тот же паттерн что и в QVariant, boost::any а может и где еще
Записан
kamre
Частый гость
Offline
Сообщений: 233
Re: QScopedPointer
«
Ответ #24 :
Октябрь 25, 2018, 11:41 »
Цитата: Igors от Октябрь 24, 2018, 12:39
Название не помню, но это тот же паттерн что и в QVariant, boost::any а может и где еще
Так они же по значению принимают и хранят объект, а не по указателю как smart pointers.
Видимо в этой теме имеется ввиду какой-то аналог std::any, который ограничивает тип объекта, который хранит. Но инициализировать такой аналог указателем уже нельзя будет.
Записан
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...