Size: a a a

2020 May 08

IS

Iskander Saitbatalov in pro.cxx
Господа, заканчивайте)
источник

Д

Денис in pro.cxx
Нет, он оповещает всех, у кого открыта программа, которая держит ивент на подписку на папку.

Я тоже думаю, что логично агрегатором сделать сервер, иначе как такое вообще реализовать
источник

F

Fox in pro.cxx
Александр Водянников
Наверное это тема другого чата, по винде
источник

Д

Денис in pro.cxx
оке, пасиб
источник

VU

Vadim Ushakov in pro.cxx
Vadim Ushakov
Вопрос скорее по архитектуре, но всё же: есть базовый класс и наследники, каждый из которых имеет доступ к другим через защищённый метод GetDecendent. В одном из наследников (назвал его Derived3) в нескольких методах проверяется одно и то же условие (данные для проверки получаем из внешнего файла) - хочу проверять условие один раз, а код исполняемый после проверки вынести в Helper, проблемы возникают при попытке вынести код из метода Derived3::d3, в связи с тем, что там используется несколько вызовов GetDecendent. Делать Helper другом базового класса нельзя, вызвать GetDecendent и передать результаты можно, но реально они нужны только HelperHardCase-реализации, поэтому считаю это тоже плохим вариантом.
https://pastebin.com/Twmy1yzh
Народ, а тут никто не может подсказать?
источник

ПК

Побитый Кирпич... in pro.cxx
Constantine Drozdov
Ну как вектор создает элемент? Аллокает буфер, размещает в нем объект T и возвращает тебе T&
Вектор аллокает не массив чаров, а void*. И уже в нём создаёт объект и конвертит его в T*. То есть каста char* -> T* там нету
источник

ПК

Побитый Кирпич... in pro.cxx
Так что я всё таки склоняюсь больше к тому, что GetTokenInformation юзается через ub
источник

m

magras in pro.cxx
Побитый Кирпич
Вектор аллокает не массив чаров, а void*. И уже в нём создаёт объект и конвертит его в T*. То есть каста char* -> T* там нету
Нельзя выделить место под void.
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Нельзя выделить место под void.
Я имею ввиду что всякие malloc и new(size) возвращают void*
источник

m

magras in pro.cxx
Побитый Кирпич
Я имею ввиду что всякие malloc и new(size) возвращают void*
Согласно моим представлениям new не может вернуть void*.
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Согласно моим представлениям new не может вернуть void*.
источник

m

magras in pro.cxx
Да, но выражение new T всегда вернет указатель на T. Кроме того, очевидно, что вектор не работает с голым new, а использует алокаторы.
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Да, но выражение new T всегда вернет указатель на T. Кроме того, очевидно, что вектор не работает с голым new, а использует алокаторы.
Дискуссия была не об этом
источник

m

magras in pro.cxx
Ну и как раньше говорилось, вообще не важно что делать с указателем. Можно хоть (intptr_t)p использовать в промежуточных точках.
источник

m

magras in pro.cxx
Побитый Кирпич
Дискуссия была не об этом
Вы сказали, что вектор выделяет не массив чаров а void*. Это не правда.
источник

I

Ioann_V in pro.cxx
magras
Согласно моим представлениям new не может вернуть void*.
omg
источник

m

magras in pro.cxx
Более того, аллокатор не имеет права возвращать void*:
1)
Expression   Return type
a.allocate(n)   A::pointer
2)
A::pointer
Satisfies NullablePointer, LegacyRandomAccessIterator, and LegacyContiguousIterator.

void* не удовлетворяет LegacyRandomAccessIterator.
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Более того, аллокатор не имеет права возвращать void*:
1)
Expression   Return type
a.allocate(n)   A::pointer
2)
A::pointer
Satisfies NullablePointer, LegacyRandomAccessIterator, and LegacyContiguousIterator.

void* не удовлетворяет LegacyRandomAccessIterator.
Нигде не говорил что аллокатор возвращает void*, но:
https://en.cppreference.com/w/cpp/memory/allocator/allocate

Allocates n * sizeof(T) bytes of uninitialized storage by calling ::operator new(std::size_t)
источник

ПК

Побитый Кирпич... in pro.cxx
Самое главное, что дискуссия была НЕ ОБ ЭТОМ
источник

ПК

Побитый Кирпич... in pro.cxx
А о том, является ли использование GetTokenInformation из винапи UB
источник