@ProCxx

Страница 1684 из 2477
Ilia
23.01.2018
15:37:57
Посоны, а чо там с delete this?
Да у всех крышу рвёт с него...

Constantine
23.01.2018
15:38:22
и?
смотри: существует сущность выше, который должен отвечать за read/write с контрактом ошибок, удобным тебе. Этот контракт ошибок логически не связан с захваченной сущностью "сетевое соединение" и владеешь ты объектом контракта

Ilia
23.01.2018
15:38:28
Я завязываю с разговорами на эту тему.

Дед Пегас
23.01.2018
15:38:52
Лущ бы using explicit пообщупали.)

Google
Constantine
23.01.2018
15:39:29
и?
фишка в том, что обертки такого объекта нужны и для них суицид это чуть ли не самое логичное поведение

Ilia
23.01.2018
15:39:36
Всё, я замолк

Constantine
23.01.2018
15:40:26
учи меня ещё, сенсей
толсто же, ты спросил я ответил)

Berkus
23.01.2018
15:40:49
фишка в том, что обертки такого объекта нужны и для них суицид это чуть ли не самое логичное поведение
он всё равно связан с циклом жизни .. как ты это там умно называешь ... ща

Серж
23.01.2018
15:40:51
Ну можно запретить все некорректные создания
как запретить создание на стеке? создание массива объектов на хипе?

Rina
23.01.2018
15:41:01
Ребят, я свой канал создал небольшой книжный технический @biblk Надеюсь, кому-то сможет помочь. По программированию хочу в том числе книги выкладывать

Berkus
23.01.2018
15:41:11
толсто же, ты спросил я ответил)
а, с захваченной сущностью "сетевое соединение"

Anatoly
23.01.2018
15:41:41
как запретить создание на стеке? создание массива объектов на хипе?
продуцирующую функцию делай и помещай в private конструктор

Constantine
23.01.2018
15:41:46
а, с захваченной сущностью "сетевое соединение"
у такой сущности циклом жизни управляешь не только лишь ты. внешнее управление выражается как delete this (явно или неявно)

Anton
23.01.2018
15:41:48
как запретить создание на стеке? создание массива объектов на хипе?
Конструкторы все закрыть и сделать статичную производящую функцию )

Google
Berkus
23.01.2018
15:42:17
у такой сущности циклом жизни управляешь не только лишь ты. внешнее управление выражается как delete this (явно или неявно)
ну и shared_ptr в обработчике СОБЫТИЙ от такой сущности, прекрасно справляется без суицида

Серж
23.01.2018
15:42:17
friend?

Anatoly
23.01.2018
15:42:48
friend?
static

Berkus
23.01.2018
15:42:50
friend?
struct Foo { static Foo* make_foo(); // only new private: Foo(); }

Constantine
23.01.2018
15:43:02
ну и shared_ptr в обработчике СОБЫТИЙ от такой сущности, прекрасно справляется без суицида
ну либо у тебя объект сдохнет с вызовом по this в стеке, либо объект может существовать в некорректном состоянии, я не вижу альтернативу

Constantine
23.01.2018
15:43:32
с чего ты это взял?
а какая альтернатива?

Berkus
23.01.2018
15:43:41
с вызовом по this в стеке он дохнет как раз при delete this

Constantine
23.01.2018
15:44:01
смотри, ты получаешь результат DISCONNECTED при проведении операции

Berkus
23.01.2018
15:44:06
а хендлер это даже не мембер функция, туда указатель на сессии аргументом передается или захваченной переменной

а какая альтернатива?
передавать shared_ptr в хендлер

дальше он может его передать дальше или скинуть

при этом работает ДАЖЕ если несколько хендлеров параллельно вызвались

Anatoly
23.01.2018
15:45:32
@berkus @webreh короче, можно резюмировать, если С++ объект управляет временем жизни ресурса, то здесь вопросов нет, если ресурс управляет временем жизни объекта C++, то delete this в самый раз

Constantine
23.01.2018
15:45:47
передавать shared_ptr в хендлер
смотри: я получаю сигнал разрыва соединения. Мои действия?

Дед Пегас
23.01.2018
15:45:49
приватный конструктор
Есть же человеческий delete

Constantine
23.01.2018
15:46:02
ну серьезно

Google
Berkus
23.01.2018
15:46:11
надоело короч, надо писать код

Constantine
23.01.2018
15:46:31
вопрос: какая альтернатива, кроме 1) объект может существовать после разрыва соединения 2) оповещение разрыва удаляет объект

Berkus
23.01.2018
15:46:32
если хочется узнать что делать - посмотри в код, я дал ссылку

там полный lifecycle сетевого соединения с ssl

Constantine
23.01.2018
15:47:12
я не понимаю, какое третее между "объект удален оповещением" и "объект не удален оповещением"

Anatoly
23.01.2018
15:49:17
хуета, ок
ну, это не то, что я сказал

Constantine
23.01.2018
15:51:12
если хочется узнать что делать - посмотри в код, я дал ссылку
так код просто реализует альтернативу "объект бывает в некорректном состоянии"

Berkus
23.01.2018
15:55:09
так код просто реализует альтернативу "объект бывает в некорректном состоянии"
я посмотрю как ты реализуешь это c delete this, хотя ты обвиосли не сможешь - застопоришься на постоянных крашах от double free

Berkus
23.01.2018
16:03:31
я не собираюсь это делать
ну я и сказал, что не сможешь

Constantine
23.01.2018
16:03:35
грубо говоря я считаю корректным примером примерно следующее struct some_reference_wrapper { static some_reference_wrapper * wrap(notifiable_object & ref) { return new some_reference_wrapper(ref); } void notify() & { delete this; } private: explicit some_reference_wrapper(notifiable_object & ref): ref_(ref) { ref.on_dtor(UTILS_BIND_THIS(notify)); } notifiable_object & ref_; };

Alexander
23.01.2018
16:04:59
вроде же Джерри там главный. Но Зайцев там тоже важный ?
ну ты как бы пинай, чтобы либы пакетили. Ещё пусть пилят плагин

там работы жесть сколько. просто пусть пакетят либы

Дед Пегас
23.01.2018
16:08:18
Нахера delete this?

Не нужно же. И так вызывается деструктор.

Berkus
23.01.2018
16:12:36
Нахера delete this?
лучше заменить на эксплицитный вызов деструктора в конструкторе

Google
Constantine
23.01.2018
16:13:48
а, стоп, все норм

Berkus
23.01.2018
16:14:15
чсх я уже написал)
не знаю что такое чсх, но давай ссылку

Constantine
23.01.2018
16:14:21
что самое характерное

я думал в примере есть double free

у меня нет примеров кода с double free, я все указатели врапаю всегда

delete запрещено конвенцией кроме реализации just-another-smart-ptr

Berkus
23.01.2018
16:15:18
должно быть жутко эффективно, но мы не об этом

хтппс сессия

Admin
ERROR: S client not available

Berkus
23.01.2018
16:15:45
внешнее владение, или как там у вас это называется

Constantine
23.01.2018
16:16:05
у меня будет в этой модели сокет-суицидник, который всегда за оберткой

хотя это неудобно, да

наверное, обертка-сессия хранит сокет-суицидник с приватным деструктором и вызывает disconnect сокета в своем деструкторе наверное, сокет-суицидник хранит ссылку на сессию и оповещает сессию перед самоуничтожением

принципиально можно без delete this, она просто грохнет его через unique_ptr

Berkus
23.01.2018
16:19:24
disconnect() сокета это асинхронная операция, которая заканчивается ... когда-то

Constantine
23.01.2018
16:19:41
тогда у сокета не ссылка, а указатель на сессию

Berkus
23.01.2018
16:20:15
Constantine
23.01.2018
16:20:27
нельзя, только delete this, только хардкор
ну в моем астральном мире это одно и то же

Google
Constantine
23.01.2018
16:20:40
технически delete this там будет после последней операции

оповещение произошедшего disconnect

Berkus
23.01.2018
16:20:56
хорошо, а как ты определишь что операция была последняя?

Constantine
23.01.2018
16:21:11
тахионный ответ ;)

я оповещаю сессию, если она от меня не детачнулась раньше

Berkus
23.01.2018
16:21:46
ну вот ты вызвал сокету дисконнект, и он уже дисконнектнулся, но тут вдруг SSL такой А ЗАКРЫТЬ СЕКЬЮРНОЕ СОЕДИ

Constantine
23.01.2018
16:22:20
у меня взаимные оповещения о смерти между сессией и сокетом-суицидником

логика "что делать при операциях с нуллптр вместо сокета" остается сессии

сессия никому никогда не дает указатель внутренний на сокета-суицидника

Berkus
23.01.2018
16:24:18
логика "что делать при операциях с нуллптр вместо сокета" остается сессии
ясно-понятно, то есть во ВСЁМ коде у тебя еще и проверка shared_ptr на нулл, да?

Constantine
23.01.2018
16:24:26
у меня нет ни одного shared_ptr

только обычные указатели

проверка на null в деструкторах

проверка на null в сессии при операциях

мультитрединг идет в лес

Berkus
23.01.2018
16:26:18
что ж, я составил представление о твоей (говно)архитектуре, спасибо

она хотя бы быстрая

Vsevolod
23.01.2018
16:30:59
она говняная

даже в plain c постоянно приходится иметь дело с рефкаунтерами

Berkus
23.01.2018
16:31:17
она говняная
зато быстрая

Vsevolod
23.01.2018
16:31:32
так и shared_ptr быстрая

если не дергать рефкаунтер без нужны

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