@ProCxx

Страница 2019 из 2477
ProIt
01.05.2018
23:19:31
я не понимаю может это из-за QList контейнера но таким макаром не работает

вообщем без скриншетов, смыссл в том, что в массиве структура хранится в ней есть строка с датой, вот по этой строке бывает очень хорошо находить нужный элемент

раньше вернее было удобно

Andrey
01.05.2018
23:24:16
вообще какой-то странный способ отладки вы придумали. глазами пробегать по всему списку в поисках чего-то нужного - та еще радость.

Google
Andrey
01.05.2018
23:25:11
но можно же просто попросить отладчик показать нужную область памяти и скастовать ее к вашей структуре.

ProIt
01.05.2018
23:26:54
не это вы очень сложно выражаетесь, я ж деревня не алё, легче дату нужную найти чем каждый раз указывать что мне на данный момент нужно )))

вы имеете ввиду "добавить вычисляемое выражение" ?

Andrey
01.05.2018
23:31:38
есть некий массив Array array[size]; командой p array вы смотрите этот массив с нулевого элемента. отладчик показвыает вам первые N элементов. попросите отладчик показать этот же массив, но не с нулевого, а N-ного элемента.

ProIt
01.05.2018
23:34:37
интересно, я подумал так можно сделать в самом креаторе, попробовал но походу нельзя

если это делать через консоль то это вообще не дело

Andrey
02.05.2018
00:10:51
я qtcreator видел только на картинках, да и то издалека. но, подозреваю, что и в нем такое сделать возможно.

Andrey
02.05.2018
00:25:41
Для static size массивов и векторов такое точно есть.
спасибо, но я пользуюсь vim, а не qtcreator

ProIt
02.05.2018
00:51:22
уже утро а я всё ищу как облегчить страдания, для статик сайз мне не подходит, а в креаторе не нашёл как можно задать просмотр значений массива с середины

пожалуй надо будет на qt задать вопрос )

вот на винде я не знал что с этим могут быть проблемы

Сергей
02.05.2018
02:18:22
Привет всем!

Google
Ilia
02.05.2018
04:51:18
как увеличить количество отображаемых значений в массиве может подскажите? )
Да смысла нет. В принципе это параметр у gdb, сколько элементов массива печатать с начала. Но IDE их обычной перестраивают на свой лад. А расширять его нет смысла, проще просто напечатать нужный элемент. Либо в консоли gdb, либо вокне выражений добавить выражение

я не понимаю может это из-за QList контейнера но таким макаром не работает
QList штука совсем из другой оперы. Это пользовательская структура данных и чтобы ее посмотреть надо устанавливать специальные плагины в отладчик. Причем в каждый свои. Я точно не помню но вроде бы в Creator были какие-то настройки на эту тему, в разделе отладки.

Евгений
02.05.2018
08:02:10
Я тут старую либу с си на плюсы переписываю, вот это как понимать? static void allocate_enough_to_reach(matches_and_old_values_array *array, void *last_byte_to_reach_plus_one, size_t bytes_needed = last_byte_to_reach_plus_one - (void *) array; ... } Ошибка компиляции: error: invalid use of ‘void’ size_t bytes_needed = last_byte_to_reach_plus_one - (void *) >>array<<;

Александр
02.05.2018
08:03:01
void* не поддерживает адресную арифметику по стандарту

Кастуй к char*

Dmitrii
02.05.2018
09:07:33
Ребят кто с antlr работал в С++? Есть задача преобразовать один код в другой с учётом грамматики, лексики и синтаксиса. Может есть у кого доки для быстрого старта?

Alexander
02.05.2018
09:13:57
А почему antlr? Это разве не жабье поделие?

Мб стоит попробовать что-то на базе llvm

Dmitrii
02.05.2018
09:16:02
А почему antlr? Это разве не жабье поделие?
ага ) но там и на С++ есть. просто проект до этого с использованием antlrV3 писался. надо к нему докрутить. Ребят если кто юзал antlr неинтровертте инфу, очень надо ?

ProIt
02.05.2018
09:16:05
QList штука совсем из другой оперы. Это пользовательская структура данных и чтобы ее посмотреть надо устанавливать специальные плагины в отладчик. Причем в каждый свои. Я точно не помню но вроде бы в Creator были какие-то настройки на эту тему, в разделе отладки.
Там есть опция "использоваться помощник отладчика" наверное она позволяет просматривать qt шные контейнеры. Есть ещё дополнительные помощники отладчика - поле с кнопкой обзор, где можно открыть что-то, не понятно что. Надо загуглить для чего это...

Andrey
02.05.2018
11:05:24
Коллеги возник вопрос. есть ли преимущества у shared_ptr над статическим объектом. Время жизни одинаковое (плюс минус). Ну то есть у меня грубо говоря в мэин лупе процесса создаётся два потока, каждому нужно передать некий объект (один и тот же для обоих). Текущее решение использует создание shared_ptr но я не вижу смысла особо, если можно создать статически и передавать по ссылке.

Александр
02.05.2018
11:06:35
в поинтере потокобезопасность продумана

Andrey
02.05.2018
11:07:39
в поинтере потокобезопасность продумана
Объект который передаётся потокбезопасен

Friedrich
02.05.2018
11:07:44
Ну мало ли, окажется, что всё-таки в каждый поток надо передавать свой объект или адаптер. Или кому-то понадобится завести два экземпляра твоего сервиса в одном адресном пространстве.

Andrey
02.05.2018
11:09:28
Я думаю, что лучше всё-таки не использовать статик лишний раз. Если ты можешь передавать shared_ptr и это достаточно удобно — лучше так и оставить. Не стоит вносить в код зависимости на лишние «глобальные» объекты.
Проблема с shared_ptr в том что некоторые особо умные люди в команде пихают его во все места не задумываясь и создают кольцевые зависимости. В итоге имеем ситуацию когда объект под shared_ptr не удаляется вообще никогда. По-этому я пытаюсь сейчас их изжить где только можно. Убрать грабли в сарай так сказать.

Andrey
02.05.2018
11:10:41
Отдавай weak_ptr
Они из него тоже шаред делают =(

Google
/dev
02.05.2018
11:11:05
Они из него тоже шаред делают =(
Руки за такое надо на ревью отрывать

Александр
02.05.2018
11:11:23
лол

Matwey
02.05.2018
11:11:40
Руки за такое надо на ревью отрывать
А как им еще пользоваться то? Чтобы им пользоваться надо сначала из weak_ptr сделать shared_ptr, и проверить что сделался

А потом попользовался и удалил shared_ptr

Andrey
02.05.2018
11:11:56
Руки за такое надо на ревью отрывать
Я один а их миллиард... Или даже два. Всё ревьюить не успеваю.

Friedrich
02.05.2018
11:12:10
А как им еще пользоваться то? Чтобы им пользоваться надо сначала из weak_ptr сделать shared_ptr, и проверить что сделался
Это не единственный юзкейс. Можно просто проверять, например, удалился объект или ещё нет.

Friedrich
02.05.2018
11:12:44
/dev
02.05.2018
11:12:50
А потом попользовался и удалил shared_ptr
Похоже, что сверхразумы получают shared, затем его и хранят. В том и боль

Andrey
02.05.2018
11:13:03
А как им еще пользоваться то? Чтобы им пользоваться надо сначала из weak_ptr сделать shared_ptr, и проверить что сделался
Они из weak делают shared и сохраняют как поля класса. Причём в инстансе который сам под shared_ptr. И понеслась

Matwey
02.05.2018
11:13:20
Но ты об этом не знаешь

Ну типа, есть объект, внутри объект

Оъект лежит в shared_ptr, нужно отдавать shared_ptr на член объекта

Вот это всё

А рефкаунтер у них будет общий

Andrey
02.05.2018
11:14:18
Вот кстати на собеседовании сюда обсуждал этот вопрос

;) про aligned shared_ptr

Google
Andrey
02.05.2018
11:15:17
я тут не хотел вдваться в детали но это ещё и не std::shared_ptr а наш собственный (но очень близкий к стандартному)

Короче вопрос изначальный как бы shared_ptr vs static - подводные камни, отговорите

Assasin
02.05.2018
11:16:03
Может тебе нужен aligned shared_ptr ?
а можно ссылочку, где про него почитать?

/dev
02.05.2018
11:17:01
Короче вопрос изначальный как бы shared_ptr vs static - подводные камни, отговорите
Подводные камни надо искать в совместимости динамических либ, если они вообще здесь есть

Admin
ERROR: S client not available

/dev
02.05.2018
11:19:45
Почему?
У тебя уже аватарка без ручек

Почему?
Потому что это идёт в разрез с семантикой.

Andrey
02.05.2018
11:21:17
а можно ссылочку, где про него почитать?
http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr конструктор номер 8

Короче если тебе нужно из объекта под shared_ptr отдать значение поля тоже shared_ptr ом ты можешь создать его таким образом чтобы увязать управляющую структуру. То есть shared_ptr будет иметь тип поля, но пока он жив, то материнский объект тоже будет существовать.

reference counter у них будет один на двоих

Assasin
02.05.2018
11:24:15
хм, это в таких случаях как раз нужен shared_from_this?

Matwey
02.05.2018
11:25:18
а можно ссылочку, где про него почитать?
http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr Пункт 8

shared_from_this это перпендикулярная фича

Max
02.05.2018
11:26:34
хм, это в таких случаях как раз нужен shared_from_this?
Он больше используется для гарантии, что ты не сделаешь два независимых шареда на себя, и потом тот что дольше живет, отстрелит тебе обе ноги повторным вызовом delete

Matwey
02.05.2018
11:26:39
Тут просто игра идет на том, что shared_ptr состоит из двух указателей. Указатель на контрольный блок, где расположены счетчики использования и указатель на объект. Указатель на объект у каждого shared_ptr может указывать в разные места

А контрольный блок у них может быть общий

Assasin
02.05.2018
11:27:21
понял, спасибо

Matwey
02.05.2018
11:27:28
shared_from_this работает по другому

Google
Matwey
02.05.2018
11:27:37
Нужно отнаследоваться от класса enable_shared_from_this

он добавит в твой объект еще один член weak_ptr

Т.е. указатель на контрольный блок

Когда ты будешь класть свой объект в shared_ptr, то shared_ptr поймет, что твой тип - наследний enable_shared_from_this и внутри запишет в этот член валидный указатель на контрольный блок

На тот же самый, который ты только что создал

Поэтому объект внутри сможет воссоздать новые shared_ptr используя свой контрольный блок, куда у него есть доступ

Но к сожалению пользоваться этим до C++17 небезопасно

Assasin
02.05.2018
11:29:42
ааа, вот что за магия там происходит, блин, все предусмотрели и оптимально сделали)

Matwey
02.05.2018
11:30:04
Потому-что shared_from_this() приводит к UB, если контрольный блок не записан, т.е. объект не лежит в shared_ptr

Oleg
02.05.2018
11:30:12
Но к сожалению пользоваться этим до C++17 небезопасно
че? Юзай бустовый - там все безопасно

Matwey
02.05.2018
11:30:19
И проверить лежит ли объект в shared_ptr перед вызовом shared_from_this() невозможно

Assasin
02.05.2018
11:30:40
а после C++17 что поменялось? проверок в контрольный блок добавили?

Oleg
02.05.2018
11:30:51
У тебя не скомпилится код, если объект, который делает sahred_fron_this сам не лежит в shared_ptr

Matwey
02.05.2018
11:31:07
скомпилится еще как

Страница 2019 из 2477