Vsevolod
это надо взять какой-нибудь оптерон многоголовый, чтобы она была очень медленная
Alexander "SonnySlave"
и так лучше не делать никогда
Stanislav
зато delete this опасен всегда
не надо так делать
Alexander "SonnySlave"
не надо так делать
вот-вот, согласен. не надо так делать
Berkus
ты же в курсе что delete nullptr это вполне ок и описано в стандарте? проверка не нужна
да, но проверки при вызовах методов на этом ptr, потому что nullptr->method() почему-то не работает
Berkus
а на delete this надо проверку делать?
да, if (delete this) { убиться_апстену(); }
Berkus
вот это
там тоже проверка на нулл не себя, т.к. по стандарту this не может быть null
Berkus
это только в уебанском msvc бывает что this == nullptr
Stanislav
да я ваще не this, я походу пропустил всю дискуссию
Berkus
в MFC (лол)
Berkus
if (this != nullptr) { ... бла бла
Pavel
не только кстати в MFC
Alexander "SonnySlave"
в MFC (лол)
так-так-так, MFC это библиотека промышленного уровня, попрошу
Berkus
так-так-так, MFC это библиотека промышленного уровня, попрошу
ну там довольно промышленные индусы наворотили промышленной хуйни
Stanislav
Berkus
или промышенные...
🦥Alex Fails
В Питере
надо б заметку в @procxxnews зафигарить
🦥Alex Fails
по сути это call_back функция, вызываемая потрохами windows
можно в User Data хранить данные полезные, тот же shared_ptr ,ну или что там надо
🦥Alex Fails
SetWindowLongPtr
Anatoly
SetWindowLongPtr
так и хранится, я не хотел деталей, а хотел описать, что не объект С++ управляет временем жизни ресурса, а ресурс (окно) управляет временем жизни объекта С++. и что в этом случае, чтобы осуществить удаление объекта С++ и используется delete this при получении оповещения от Windows Manager-a об уничтожении окна
🦥Alex Fails
обычно в win api-приложухах идет так: 1. регистрация класса окна; 2. создание окна; 3. цикл сообщений; 4. чистка дерьма.
Berkus
где тема заз
Berkus
мне нужен стикер с ассенизаторской машиной и надписью delete this; на ней
Anatoly
обычно в win api-приложухах идет так: 1. регистрация класса окна; 2. создание окна; 3. цикл сообщений; 4. чистка дерьма.
мы чуть выше поднялись, на уровень MFC, где это все скрыто и до нас доходят только обработчики в контексте объекта С++
🦥Alex Fails
а, если mfc, то там тяжко, да. Кстати. Тут WTL 10 зарелизился недавно!
Anatoly
а, если mfc, то там тяжко, да. Кстати. Тут WTL 10 зарелизился недавно!
я не знаю куда это засунуть при наличии того же Qt. разве что у кого-то написано что-то на нем.
🦥Alex Fails
где тема заз
он тут есть!
Constantine
а это зачем?
потому что взаимные оповещения о смерти
Constantine
if (this != nullptr) { ... бла бла
там эта проверка в одном случае, кстати
Constantine
и без нее реально заебешься кодить
🦥Alex Fails
if (this != nullptr) { ... бла бла
гцц вроде может отломить код из-за оптимизации
Constantine
гцц вроде может отломить код из-за оптимизации
Они так и делают. А вижаку норм, ибо ответ "почему так не надо" не самый интересный
Berkus
гцц вроде может отломить код из-за оптимизации
не, это всегда true поэтому вся ветка выполняется без ифов
Berkus
вот и всё
Constantine
вижак просто non-conformant стандарта
ну да, вижак не по стандарту, зато нет копипасты 1000 раз одного и того же
Constantine
потому что этот внутренний this == nullptr выносить наверх с расстрелами ноги
Constantine
в conformant
Constantine
он там используется для запроса wrapped handle из wrapper-а
Constantine
мне на самом деле интересно, в 2к4 как там были дела с не-MFC объектными обертками над виндой
🦥Alex Fails
ATL вроде более-менее
Constantine
там полный ужас
Constantine
я бы за паттерн class some : template<some> вообще убивал бы
Constantine
это нормальный CRTP
и как там дела с наследованием таких классов
Berkus
и как там дела с наследованием таких классов
так же как и с другим наследованием - наследуешь, прекрасно себя чувствуешь
Berkus
ты знаешь что делает template<some>?
Constantine
Berkus
ну давай, унаследуй T: enable_shared_from_this<T> нормально
зачем, я предпочитаю плоские иерархии
Constantine
зачем, я предпочитаю плоские иерархии
ну то есть предпочитаешь отсутствие иерархии, динамического полиморфизма и компиляцию вечность
Berkus
ну то есть предпочитаешь отсутствие иерархии, динамического полиморфизма и компиляцию вечность
предпочитаю дружить с логикой и не делать идиотские выводы как ты сейчас только что
Constantine
окай, скажи мне, как мне объявить абстрактное дерево с узлами под shared_ptr
Nikita
гцц вроде может отломить код из-за оптимизации
и может, и ломает, со свистом, пританцовывая
Constantine
не скажу
ну вот тебе и ответ про логику
Constantine
как только возникает малейшая естественная иерархия, enable_shared_from_this летит на помойку
Constantine
и да, нельзя определять внешний tree_node с потомками, пушо в этом случае узел дерева не видит своих потомков
Ioann_
Ребят, у меня к вам вопрос
Ioann_
Как такое возможно, что я запускаю тест - он рабоает одно время, запускаю его снова - другое, большее ?
Ioann_
и так, постоянно время скачет ...
Constantine
у системы буфер записи кончился, а ты пишешь на HDD 1ГБ инфы
Anonymous
А что тест делает?
Ioann_
Тест, вычисления делает
Ioann_
В моем случае, примитивном - банальное умножение матриц
Anatoly
В моем случае, примитивном - банальное умножение матриц
а профилировщик какое самое горячее место показывает?
Ioann_
И я никак не могу, замерить что и сколько у меня работает. Совершенно не могу. Так как работает оно по разному.
Berkus
Как такое возможно, что я запускаю тест - он рабоает одно время, запускаю его снова - другое, большее ?
у меня тоже вопрос - на каком языке тест, какие фичи использует, чем компилириуется
Ioann_
а профилировщик какое самое горячее место показывает?
Да там просто три цикла бахнуто, вот они скорее всего и будут узким местом. Вопрос то не в узкости и горлышке бутылки. А в том, почему разные запуски теста, дают разный ответ.
Berkus
если просто три цикла то cache скорее всего, prefetch используешь?