
Ilia
23.01.2018
15:37:57

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
Всё, я замолк

Berkus
23.01.2018
15:40:04

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

Constantine
23.01.2018
15:41:46

Anton
23.01.2018
15:41:48

Google

Berkus
23.01.2018
15:42:17

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

Anatoly
23.01.2018
15:42:48

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

Berkus
23.01.2018
15:43:23

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
а хендлер это даже не мембер функция, туда указатель на сессии аргументом передается или захваченной переменной
дальше он может его передать дальше или скинуть
при этом работает ДАЖЕ если несколько хендлеров параллельно вызвались

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

Berkus
23.01.2018
15:45:43
закончили

Constantine
23.01.2018
15:45:47

Дед Пегас
23.01.2018
15:45:49

Berkus
23.01.2018
15:45:58

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

Constantine
23.01.2018
15:59:58

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
там работы жесть сколько. просто пусть пакетят либы

Berkus
23.01.2018
16:05:18
после пары double free обсудим еще раз

Baruch
23.01.2018
16:05:42

Дед Пегас
23.01.2018
16:08:18
Нахера delete this?
Не нужно же. И так вызывается деструктор.

Berkus
23.01.2018
16:12:36

Google

Alexander
23.01.2018
16:12:55

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

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

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 быстрая
если не дергать рефкаунтер без нужны