Constantine
например непонятно что будет, если std::function при вызове себя прибьет
Anton
Да нормально все для дизайна в стиле 90х :)
Berkus
ее нет, указатель на C++ в мембере WNDCLASS-а операционной системы
давай остановимся и обсудим вот что, мы сейчас говорим про архитектурный подход общий или про конкретные костыли конкретной системы? это важно
Anton
В старых либах дофига такого
Anatoly
давай остановимся и обсудим вот что, мы сейчас говорим про архитектурный подход общий или про конкретные костыли конкретной системы? это важно
про конкретное ограничение конкретного архитектурного решения, в котором используется суицид объекта
Berkus
про конкретное ограничение конкретного архитектурного решения, в котором используется суицид объекта
ну тут я думаю легко можно договориться - это ОГРАНИЧЕННОЕ (as in, DUMB) архитектурное решение
Berkus
навязанное наслоением си с классами поверх ассемблерного апи
Anatoly
ну тут я думаю легко можно договориться - это ОГРАНИЧЕННОЕ (as in, DUMB) архитектурное решение
ну, в принципе, все так и делают, полагаясь на это ограничение
Matwey
Я до сих пор это подозреваю... но доказать не могу :)
Я видел delete this в книжке Александреску
Alexander "SonnySlave"
сколько можно это обсасывать???
Berkus
сколько можно это обсасывать???
подключайся, фабрики по сжиганию делетеров зис простаивают
Matwey
В разделе про синглтоны
Berkus
В разделе про синглтоны
~AlexandrescuKamikazeSingleton() { delete this; }
Anatoly
Господа, а можно ли как-то эту порнографию редуцировать, не используя препроцессор? 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
подключайся, фабрики по сжиганию делетеров зис простаивают
я плохо понимаю, почему тебе не нравится delete this но устраивают остальные варианты суицида. вот тебе пример: у тебя есть какой-то пул сетевых соединений, что должно делать соединение если оно разорвано?
Constantine
писать if корректность состояния в каждом методе?
Constantine
внешняя морда общается только с пулом
Berkus
(подскажу - там НЕ используется delete this)
Berkus
мы говорили про разное, вопрос уже улажен
Berkus
не только, там ссылка на сессию держится пока она кому-нибудь интересна. в случае с полностью асинхронными вызовами это важно
Berkus
пушо например резолвер может затупить на линуксе от 2 минут до 2 дней, но какбе не ломать же из-за этого всё
Constantine
угу
Berkus
ты понимаешь что ты внешнее (управляемое) поведение заталкиваешь внутрь класса?
Berkus
а если я объект создал не через new?
Constantine
ты понимаешь что ты внешнее (управляемое) поведение заталкиваешь внутрь класса?
владение объектом может не подразумеваться контрактом
Berkus
что сделает твой delete this?
Constantine
потому что объект захватывает ресурс, которым на самом деле не владеют
Anton
Ну можно запретить все некорректные создания
Berkus
ну и как писатель либы (достаточно универсальной) ты обосрался, затолкав полиси вместо механизма куда-то в дебри либы
Constantine
например, *установленным* сетевым соединением ты на самом деле не владеешь
Constantine
или окном в винде ты не владеешь
Berkus
например, *установленным* сетевым соединением ты на самом деле не владеешь
но зато владею операциями чтения и записи, а если мне они не нужны то и нафиг этот объект
Constantine
т.е. другой сущностью технически
Anatoly
а если я объект создал не через new?
то он никогда не станет окном :)
Berkus
заебали, я вам про архитектурное говорю вы мне опять про свою ебаную винду
Berkus
чуваки, винда никого не интересует
Berkus
ну и прекрасно
Constantine
ты можешь захватить ресурс, которым ты на самом деле не владеешь
Berkus
в винде нету, там си с классами нахуяченное индусами
Berkus
(MFC конкретно)
Berkus
я тебя поражу - ОКОННЫЕ ПРИЛОЖЕНИЯ есть НЕ ТОЛЬКО В ВИНДЕ
Berkus
хуемышленная
Constantine
я тебя поражу - ОКОННЫЕ ПРИЛОЖЕНИЯ есть НЕ ТОЛЬКО В ВИНДЕ
да ладно, в гуе все нахуячено индусами, сотка инфа
JBáruch
Так и надо, например, читая bincrafter я осознаю, что главный там Зайцев :)
вроде же Джерри там главный. Но Зайцев там тоже важный 🙂
Berkus
да ладно, в гуе все нахуячено индусами, сотка инфа
лично знаю несколько китайцев из троллтеха, так что не все
Крылатый
Посоны, а чо там с delete this?
Крылатый
не удаляется
Вот жалость-то!
Anatoly
Посоны, а чо там с delete this?
"террористы опять захватили самолет" (с)
Constantine
и?
смотри: существует сущность выше, который должен отвечать за read/write с контрактом ошибок, удобным тебе. Этот контракт ошибок логически не связан с захваченной сущностью "сетевое соединение" и владеешь ты объектом контракта
Крылатый
Лущ бы using explicit пообщупали.)
Constantine
и?
фишка в том, что обертки такого объекта нужны и для них суицид это чуть ли не самое логичное поведение
Constantine
учи меня ещё, сенсей
толсто же, ты спросил я ответил)
Berkus
фишка в том, что обертки такого объекта нужны и для них суицид это чуть ли не самое логичное поведение
он всё равно связан с циклом жизни .. как ты это там умно называешь ... ща
Сережа
Ну можно запретить все некорректные создания
как запретить создание на стеке? создание массива объектов на хипе?
Danil
Ребят, я свой канал создал небольшой книжный технический @biblk Надеюсь, кому-то сможет помочь. По программированию хочу в том числе книги выкладывать
Berkus
толсто же, ты спросил я ответил)
а, с захваченной сущностью "сетевое соединение"
Anatoly
как запретить создание на стеке? создание массива объектов на хипе?
продуцирующую функцию делай и помещай в private конструктор
Constantine
а, с захваченной сущностью "сетевое соединение"
у такой сущности циклом жизни управляешь не только лишь ты. внешнее управление выражается как delete this (явно или неявно)
Anton
как запретить создание на стеке? создание массива объектов на хипе?
Конструкторы все закрыть и сделать статичную производящую функцию )
Berkus
у такой сущности циклом жизни управляешь не только лишь ты. внешнее управление выражается как delete this (явно или неявно)
ну и shared_ptr в обработчике СОБЫТИЙ от такой сущности, прекрасно справляется без суицида
Сережа
friend?
Anatoly
friend?
static
Berkus
friend?
struct Foo { static Foo* make_foo(); // only new private: Foo(); }
Constantine
ну и shared_ptr в обработчике СОБЫТИЙ от такой сущности, прекрасно справляется без суицида
ну либо у тебя объект сдохнет с вызовом по this в стеке, либо объект может существовать в некорректном состоянии, я не вижу альтернативу