@ProCxx

Страница 1683 из 2477
Anatoly
23.01.2018
13:38:32
хм, тогда например в этом случае не будет утечки? X *x = new X; x->custom_delete(); а в custom_delete происходит delete this. x и this необязательно же должны совпадать
delete this и деструктор вызовет и освободит, и это последнее, что можно сделать с этим указателем, все остальное UB

Google
Ilia
23.01.2018
13:40:02
ПОЛЕЗНО КОГДА УПРАВЛЯЕТ, КАРЛ!

:-)

Иначе тебе нужно думать о удалении этого самого объекта. А так он это делает сам, когда он более не нужен.

Естественно, это возможно только в случае, когда объект имеет чёткий жизненный цикл.

Andrei
23.01.2018
13:42:53
Естественно, это возможно только в случае, когда объект имеет чёткий жизненный цикл.
как раз я думал, может ты сталкивался в работе с ситуацией, когда можно было это применить, или где-то читал. философски понятно, а вот на практике увидеть интересно

Ilia
23.01.2018
13:43:35
Ну выше прочитай, там я описывал в самом начале этой беседы. И Толя тоже. Вкратце — это работа НЕМОДАЛЬНОГО окна в приложении.

Berkus
23.01.2018
15:07:53
идиома должна называеться goto delete this;

@berkus @antoshkka ребята, вот пример, при закрытии окна пользователем объект MyWindow должен уйти в мир иной.
закрытие окна - это операция которую осуществляет "кто-то", вон он пусть и удаляет

Anatoly
23.01.2018
15:09:28
закрытие окна - это операция которую осуществляет "кто-то", вон он пусть и удаляет
на пути у пользователя только оконный менеджер, именно он уничтожает окно в системе, мне же приходит жалкий WM_DESTROY

Anatoly
23.01.2018
15:12:23
у тебя тоже в аппе есть буккипинг этих самых окон
ее нет, указатель на C++ в мембере WNDCLASS-а операционной системы

Google
Anatoly
23.01.2018
15:13:18
WM_NCDESTROY
да, Костя, но не в этом суть

Constantine
23.01.2018
15:13:20
это гарантированно последнее сообщение

вы обсуждаете delete this там или что?

Anatoly
23.01.2018
15:14:00
да

Constantine
23.01.2018
15:14:41
кажется если объект захватывает ресурс, которым не может на самом деле управлять, это даже адекватно

хотя я все равно переживаю, когда объект суидится, имея вызов в стеке

например непонятно что будет, если std::function при вызове себя прибьет

Anton
23.01.2018
15:16:09
Да нормально все для дизайна в стиле 90х :)

Berkus
23.01.2018
15:16:11
ее нет, указатель на C++ в мембере WNDCLASS-а операционной системы
давай остановимся и обсудим вот что, мы сейчас говорим про архитектурный подход общий или про конкретные костыли конкретной системы? это важно

Anton
23.01.2018
15:16:18
В старых либах дофига такого

Constantine
23.01.2018
15:16:48
Anatoly
23.01.2018
15:16:50
давай остановимся и обсудим вот что, мы сейчас говорим про архитектурный подход общий или про конкретные костыли конкретной системы? это важно
про конкретное ограничение конкретного архитектурного решения, в котором используется суицид объекта

Berkus
23.01.2018
15:19:04
про конкретное ограничение конкретного архитектурного решения, в котором используется суицид объекта
ну тут я думаю легко можно договориться - это ОГРАНИЧЕННОЕ (as in, DUMB) архитектурное решение

навязанное наслоением си с классами поверх ассемблерного апи

Anatoly
23.01.2018
15:19:30
ну тут я думаю легко можно договориться - это ОГРАНИЧЕННОЕ (as in, DUMB) архитектурное решение
ну, в принципе, все так и делают, полагаясь на это ограничение

Matwey
23.01.2018
15:23:36
Я до сих пор это подозреваю... но доказать не могу :)
Я видел delete this в книжке Александреску

Alexander
23.01.2018
15:23:51
сколько можно это обсасывать???

Berkus
23.01.2018
15:24:11
сколько можно это обсасывать???
подключайся, фабрики по сжиганию делетеров зис простаивают

Matwey
23.01.2018
15:24:15
В разделе про синглтоны

Berkus
23.01.2018
15:24:44
В разделе про синглтоны
~AlexandrescuKamikazeSingleton() { delete this; }

Google
Anatoly
23.01.2018
15:24:53
Господа, а можно ли как-то эту порнографию редуцировать, не используя препроцессор? struct width_visitor: public boost::static_visitor<std::size_t> { template<class T> std::size_t operator() (const image<T>& i) const { return i.width(); } }; struct height_visitor: public boost::static_visitor<std::size_t> { template<class T> std::size_t operator() (const image<T>& i) const { return i.height(); } }; struct depth_visitor: public boost::static_visitor<std::size_t> { template<class T> std::size_t operator() (const image<T>& i) const { return i.depth(); } };
вот такое упрощение тебе пойдет? #include <iostream> #include "boost/variant.hpp" template<typename F> class visitor : boost::static_visitor<size_t> { public: explicit visitor(F&& f) : f(std::forward<F>(f)){ } template<typename T> auto operator()(T& o) const { return f(o); } private: F f; }; template<typename T> struct image { size_t width() const {return 100;} size_t height() const {return 200;} size_t depth() const {return 300;} }; int main() { boost::variant<image<int>, image<double>> v; v = image<int>{}; boost::apply_visitor(visitor{[](auto&& o){ std::cout << o.width(); return o.width(); }}, v); }

Constantine
23.01.2018
15:25:16
подключайся, фабрики по сжиганию делетеров зис простаивают
я плохо понимаю, почему тебе не нравится delete this но устраивают остальные варианты суицида. вот тебе пример: у тебя есть какой-то пул сетевых соединений, что должно делать соединение если оно разорвано?

писать if корректность состояния в каждом методе?

внешняя морда общается только с пулом

Constantine
23.01.2018
15:27:49
Ilia
23.01.2018
15:27:52
у тебя тоже в аппе есть буккипинг этих самых окон
Блин, парни, вы что никогда на винде приложения не писали? НЕТ буккипинга никакого!

Berkus
23.01.2018
15:28:09
Ilia
23.01.2018
15:28:40
ты пропустил ссылку на beast http session от меня выше, там всё есть
Ну там тот же самый delete this, только делегированный smapt pointer-у...

Berkus
23.01.2018
15:29:16
Ну там тот же самый delete this, только делегированный smapt pointer-у...
не только, там ссылка на сессию держится пока она кому-нибудь интересна. в случае с полностью асинхронными вызовами это важно

Berkus
23.01.2018
15:29:53
пушо например резолвер может затупить на линуксе от 2 минут до 2 дней, но какбе не ломать же из-за этого всё

Ilia
23.01.2018
15:30:10
не только, там ссылка на сессию держится пока она кому-нибудь интересна. в случае с полностью асинхронными вызовами это важно
Вот, а случай с окном как раз характерен тем, что ССЫЛОК НА ОКНО НИГДЕ НЕ ДОЛЖНО БЫТЬ.

Berkus
23.01.2018
15:30:39
ты понимаешь что ты внешнее (управляемое) поведение заталкиваешь внутрь класса?

Ilia
23.01.2018
15:31:15
Вот, а случай с окном как раз характерен тем, что ССЫЛОК НА ОКНО НИГДЕ НЕ ДОЛЖНО БЫТЬ.
Если окно куда-то принадлежит — ВООБЩЕ НЕТ ПРОБЛЕМ, там, куда оно принадлежит, оно и удаляется.

Berkus
23.01.2018
15:31:16
а если я объект создал не через new?

Google
Constantine
23.01.2018
15:31:22
ты понимаешь что ты внешнее (управляемое) поведение заталкиваешь внутрь класса?
владение объектом может не подразумеваться контрактом

Berkus
23.01.2018
15:31:22
что сделает твой delete this?

Constantine
23.01.2018
15:31:39
потому что объект захватывает ресурс, которым на самом деле не владеют

Ilia
23.01.2018
15:31:47
ты понимаешь что ты внешнее (управляемое) поведение заталкиваешь внутрь класса?
С чего ты взял, что это ВНЕШНЕЕ поведение? Почему такая узость мышления у вас всех?

Anton
23.01.2018
15:31:53
Ну можно запретить все некорректные создания

Berkus
23.01.2018
15:31:56
ну и как писатель либы (достаточно универсальной) ты обосрался, затолкав полиси вместо механизма куда-то в дебри либы

Constantine
23.01.2018
15:31:59
например, *установленным* сетевым соединением ты на самом деле не владеешь

Admin
ERROR: S client not available

Ilia
23.01.2018
15:32:24
Ну, другой life cycle у объектов, принципиально другой. Не value это, и не Utility....

Constantine
23.01.2018
15:32:30
или окном в винде ты не владеешь

Berkus
23.01.2018
15:32:32
например, *установленным* сетевым соединением ты на самом деле не владеешь
но зато владею операциями чтения и записи, а если мне они не нужны то и нафиг этот объект

Constantine
23.01.2018
15:33:16
т.е. другой сущностью технически

Anatoly
23.01.2018
15:34:00
а если я объект создал не через new?
то он никогда не станет окном :)

Ilia
23.01.2018
15:34:34
Меня даже больше бесит, что вы так все взъелись на это дело... Я вообще не понимаю, с чего... Ну, удаляет объект сам себя, ну делов-то...

Berkus
23.01.2018
15:34:38
заебали, я вам про архитектурное говорю вы мне опять про свою ебаную винду

чуваки, винда никого не интересует

Constantine
23.01.2018
15:34:50
Google
Ilia
23.01.2018
15:35:08
заебали, я вам про архитектурное говорю вы мне опять про свою ебаную винду
Беркус, ты удивишься, в оконных приложения ТОЖЕ ЕСТЬ АРХИТЕКТУРА!

Constantine
23.01.2018
15:35:12
ты можешь захватить ресурс, которым ты на самом деле не владеешь

Berkus
23.01.2018
15:35:26
Беркус, ты удивишься, в оконных приложения ТОЖЕ ЕСТЬ АРХИТЕКТУРА!
в винде нету, там си с классами нахуяченное индусами

(MFC конкретно)

Ilia
23.01.2018
15:35:55
MFC нормальная библиотека промышленная.

Berkus
23.01.2018
15:35:55
Беркус, ты удивишься, в оконных приложения ТОЖЕ ЕСТЬ АРХИТЕКТУРА!
я тебя поражу - ОКОННЫЕ ПРИЛОЖЕНИЯ есть НЕ ТОЛЬКО В ВИНДЕ

Berkus
23.01.2018
15:36:02
хуемышленная

Ilia
23.01.2018
15:36:03
Да

Constantine
23.01.2018
15:36:13
я тебя поражу - ОКОННЫЕ ПРИЛОЖЕНИЯ есть НЕ ТОЛЬКО В ВИНДЕ
да ладно, в гуе все нахуячено индусами, сотка инфа

Baruch
23.01.2018
15:36:38
Так и надо, например, читая bincrafter я осознаю, что главный там Зайцев :)
вроде же Джерри там главный. Но Зайцев там тоже важный ?

Berkus
23.01.2018
15:36:40
да ладно, в гуе все нахуячено индусами, сотка инфа
лично знаю несколько китайцев из троллтеха, так что не все

Ilia
23.01.2018
15:37:12
да ладно, в гуе все нахуячено индусами, сотка инфа
Мама не индус, папа тоже вроде не индус, следовательно я — не индус...

Дед Пегас
23.01.2018
15:37:32
Посоны, а чо там с delete this?

Berkus
23.01.2018
15:37:48
Дед Пегас
23.01.2018
15:37:57
не удаляется
Вот жалость-то!

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