powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Есть готовые обертки для указателей с проверкой на существование объекта?
25 сообщений из 57, страница 1 из 3
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634173
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть умные указатели, которые при выходе из области видимости удаляют объект. Но мне не надо удалять объект, а всего- навсего передать объект в другую подсистему и периодически анализировать удалили там его или пока нет. Другими словами, нужна обертка, у которой перегружены все операторы указателя + метод empty(), чтобы проверить валидность объекта.

Можно обойтись без велосипедостроения?
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634181
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любопытно.

Если ты уже проанализировал .empty() и узнал что он пустой - какие твои действия дальше?
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634183
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЛюбопытно.

Если ты уже проанализировал .empty() и узнал что он пустой - какие твои действия дальше?

Я хочу это использовать в собственном барьере синхронизации: с помощью этого механизма я пойму, что задача, унаследованная от QRunnable, выполнена и удалена. В Qt есть такое неудобство: QThreadPool позволяет дождаться заврешения всех задач, не разделяя их по подсистемам (поскольку работа идет через статический объект QGlobalInstance). А я хочу создать возможность для каждой подсистемы анализировать выполненность только своих задач.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634192
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНо мне не надо удалять объект, а всего- навсего передать объект в другую подсистему и
периодически анализировать удалили там его или пока нет.

Не надо ничего анализировать. Либо у твоих объектов контролируемое время жизни, либо
используется счётчик ссылок. Всё остальное - от лукавого.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634195
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLЕсть умные указатели, которые при выходе из области видимости удаляют объект. Но мне не надо удалять объект, а всего- навсего передать объект в другую подсистему и периодически анализировать удалили там его или пока нет. Другими словами, нужна обертка, у которой перегружены все операторы указателя + метод empty(), чтобы проверить валидность объекта.

Можно обойтись без велосипедостроения?

Да. Это std::weak_ptr.
Из std::shared_ptr копируете в weak_ptr.
Пока объект существует, weak_ptr.lock() будет возвращать shared_ptr на него.
Когда объект удален, то lock() вернет пустой shared_ptr
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634203
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovНе надо ничего анализировать. Либо у твоих объектов контролируемое время жизни, либо
используется счётчик ссылок. Всё остальное - от лукавого.


Беда в том, что QThreadPool сам удаляет задачи. Я как-то попробовал написать delete для выполненной задачи и моя программа упала. А счетчики ссылок в умных указателях идут "в комплекте" с удалением объекта.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634205
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyДа. Это std::weak_ptr.
Из std::shared_ptr копируете в weak_ptr.
Пока объект существует, weak_ptr.lock() будет возвращать shared_ptr на него.
Когда объект удален, то lock() вернет пустой shared_ptr

Тогда надо чтобы вторая подсистема работала с shared_ptr и не удаляла объект после окончания. А QThreadPool сам вызывает delete для задач, так что система упадет.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634207
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте по максимуму. Пускай все системы пишут с умными указателями.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634210
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДавайте по максимуму. Пускай все системы пишут с умными указателями.

Хотя, я не пробовал запаковывать задачу в shared_ptr и так скармливать QThreadPool: возможно он делает проверки типа и в этом случае не будет вызывать delete...
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634307
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЛюбопытно.

Если ты уже проанализировал .empty() и узнал что он пустой - какие твои действия дальше?
Интереснее будет если проанализировать, что указатель не empty(), то что дальше? Вот если прикоснуться к нему оператором разыменования... :)
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634308
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL... передать объект в другую подсистему и периодически анализировать удалили там его или пока нет....

ИМХО - у Вас совсем ДРУГАЯ задача. Вам нужна система подписчиков на удаление-добавление-редактирование объекта. И вся недолга...


удачи вам
(круглый)
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634325
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petravmaytonЛюбопытно.

Если ты уже проанализировал .empty() и узнал что он пустой - какие твои действия дальше?
Интереснее будет если проанализировать, что указатель не empty(), то что дальше? Вот если прикоснуться к нему оператором разыменования... :)

Дальше надо ждать, передав процессорное время другим потокам. Зачем к нему чем- то касаться?
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634340
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLДальше надо ждать, передав процессорное время другим потокам. Зачем к нему чем- то касаться?
Я говорил в общем, а вы не поняли моей шутки. Я писал про то как в одном потоке указатель проверяется на неравенство nullptr. И из этого делаются необоснованные выводы, в то время как второй поток обнуляет наш указатель.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634344
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЯ говорил в общем, а вы не поняли моей шутки. Я писал про то как в одном потоке указатель проверяется на неравенство nullptr. И из этого делаются необоснованные выводы, в то время как второй поток обнуляет наш указатель.
Связка share_ptr-weak_ptr не имеет эту проблему.
Но ТС не врубился как weak_ptr применить к его кейсу. Скорее всего он и вообще не понял еще чего он хочет добиться.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634373
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyСкорее всего он и вообще не понял еще чего он хочет добиться.

Он хочет пойти против системы, которая автоматически удаляет объекты после использования.
А он хочет удалять всё собственными руками. Зачем - неизвестно, наверное шаблоны окаменели.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634375
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovОн хочет пойти против системы...


Просто отличное начало! :)
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634376
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovОн хочет пойти против системы, которая автоматически удаляет объекты после использования.
А он хочет удалять всё собственными руками. Зачем - неизвестно, наверное шаблоны окаменели.


Нет, я не хочу удалять руками. Система уже сама удаляет задачи, и я наоборот хочу предотвратить повтроное удаление задач.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634378
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[/quot AlekseySQL]
Система уже сама удаляет задачи, и я наоборот хочу предотвратить повтроное удаление задач.
[/quot]
Так в чём проблема-то? Передал задачу системе и забыл про неё. Система удалит её ровно
один раз, после выполнения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634389
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovТак в чём проблема-то? Передал задачу системе и забыл про неё. Система удалит её ровно
один раз, после выполнения.


+ надо отследить, что задача выполнилась и удалилась. Поэтому топик называется: "Есть готовые обертки для указателей с проверкой на существование объекта?"
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634393
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL+ надо отследить, что задача выполнилась и удалилась.

Не надо: удалится она сама. Как задача отрапортует о своём выполнении - не имеет ничего
общего с сабжем и определяется по обстоятельствам. Насколько я знаю, в Qt принято посылать
сигналы, но никто не мешает поместить результат в очередь, записать в файл или отослать
почтовым голубем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634484
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovНе надо: удалится она сама. Как задача отрапортует о своём выполнении - не имеет ничего
общего с сабжем и определяется по обстоятельствам. Насколько я знаю, в Qt принято посылать
сигналы, но никто не мешает поместить результат в очередь, записать в файл или отослать
почтовым голубем.


Я хочу избежать кода в задачах, чтобы весь код распался на независимые подсистемы. Задачи должны не знать, что за ними следят :)
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634489
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал QThreadPool скормить задачу обернутую shared_ptr, а в очередь положить weak_ptr и получил ошибку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void Add(QRunnable* const Task_)
        {
            std::shared_ptr<QRunnable*> shared_ptr(Task_);
            std::weak_ptr<QRunnable*> weak_ptr(shared_ptr);

            MyDeque.push_back(weak_ptr);
            QThreadPool::globalInstance()->start(shared_ptr);//ТУТ ОШИБКА
        }



Код: plaintext
1.
ошибка: no matching function for call to ‘QThreadPool::start(std::shared_ptr<QRunnable*>&)’
             globalInstance->start(shared_ptr);

Другими словами, QThreadPool написан так, что ему нельзя скормить умный указатель, а только саму задачу. Походу и с другими обертками он поступит также. Значит остается только посылать сигналы из деструктора задачи (что мне не нравится, потому что превращает мою гениальную программу в код- лапшу).
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634503
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появилась новая проблема :)

А что если QThreadPool перемещает задачи по памяти? Ведь я тогда не смогу идентифицировать задачу по совпадению указателя!
Вот какой шаблон запуска задачи:
Код: plaintext
void start(QRunnable *runnable, int priority = 0)

нет и намека на константность указателя!

Робя, а есть в языке какие- то объекты гарантирующие свою уникальность в работающей программе (реализация ключей)? Можно конечно, набрасать класс выдающий последовательно целые номера, но хочется работать со стандартными объектами, чтобы другим было легко читать мой чудо- код.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634524
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sysguid. Но он длинный. Можно просто глобальную atomic переменную и брать из нее
последовательность.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634532
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLесть в языке какие- то объекты гарантирующие свою уникальность в работающей программе (реализация ключей)?
Код: plaintext
1.
2.
3.
std::atomic<int> counter = {0};
...
int key = ++counter;
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Есть готовые обертки для указателей с проверкой на существование объекта?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]