Мохнатые уроды и моральные пёзды. Войти !bnw Сегодня Клубы

Чо напечатает эта программа?
inb4: нахуй пошел

#include <stdio.h>

class A {
    bool m_init;
public:
    A(){m_init = true; printf ("ctor\n");}
    ~A(){
        printf ("dtor\n");
        if (m_init) {
            deinit();
        }
}

    void deinit () {
            printf ("deinit!\n");
            m_init = false;
    }
};

int main() {

    A a;
    a.~A();
    return 0;
}
#W1T1Z3 / @ninesigns / 3611 дней назад

ctor dtor deinit dtor чё-то такое, кажется
#W1T1Z3/QZF / @dzhon / 3611 дней назад
це ж UB, ні?
#W1T1Z3/QAF / @hate-engine / 3611 дней назад
компилятор соптимизировал считая пользователя не полным дибилом
#W1T1Z3/IBU / @mugiseyebrows / 3611 дней назад

@mugiseyebrows чо он тебе тама соптимизировал?

#W1T1Z3/C5R / @ninesigns --> #W1T1Z3/IBU / 3611 дней назад
@4da выкинул `m_init = false;` походу
#W1T1Z3/52Y / @mugiseyebrows --> #W1T1Z3/C5R / 3611 дней назад
@mugiseyebrows а саме цікаве --- це навіщо напряму викликати деструктор
#W1T1Z3/BR2 / @hate-engine --> #W1T1Z3/52Y / 3611 дней назад
@mugiseyebrows ``` void deinit () { printf ("deinit!\n"); m_init = false; printf ("%d\n", m_init); } ``` вот с этим работает как предполагалось
#W1T1Z3/84O / @mugiseyebrows --> #W1T1Z3/52Y / 3611 дней назад
хотя по-хорошему конпелятор должен был ворнинг или еррор показать увидя явный вызов деструктора объекта на стеке и не сконпелировать
#W1T1Z3/CC4 / @mugiseyebrows / 3611 дней назад

@mugiseyebrows схуяли?

#W1T1Z3/8UT / @ninesigns --> #W1T1Z3/CC4 / 3611 дней назад
@mugiseyebrows фантазёр, ничего он тут не должен
#W1T1Z3/7AL / @dzhon --> #W1T1Z3/CC4 / 3611 дней назад
@4da пагодька, ты дестручишь объект руками, потом скоуп уходит и он сам дестручится (второй раз), не?
#W1T1Z3/AEH / @mugiseyebrows --> #W1T1Z3/8UT / 3611 дней назад

@mugiseyebrows да

#W1T1Z3/4VB / @ninesigns --> #W1T1Z3/AEH / 3611 дней назад

@mugiseyebrows а что тебе мешает после вызова деструктора пересоздать объект на том же месте? например new(&a) A;?

#W1T1Z3/54T / @hirthwork --> #W1T1Z3/AEH / 3611 дней назад
ITT не знають/не розуміють що таке UB
#W1T1Z3/SM0 / @hate-engine / 3611 дней назад

@hirthwork тогда второй вызов деструктора будет вполне валиден

#W1T1Z3/2U8 / @hirthwork --> #W1T1Z3/54T / 3611 дней назад
@hate-engine пруф что UB
#W1T1Z3/LR8 / @anonymous --> #W1T1Z3/SM0 / 3611 дней назад
@hirthwork не пали плз // норм пример, лови печеньку
#W1T1Z3/0I1 / @dzhon --> #W1T1Z3/2U8 / 3611 дней назад
@hirthwork ент не пришло мне в голову
#W1T1Z3/K79 / @mugiseyebrows --> #W1T1Z3/2U8 / 3611 дней назад
@anonymous >Note that calling a destructor directly for an ordinary object, such as a local variable, invokes undefined behavior when the destructor is called again, at the end of scope. http://en.cppreference.com/w/cpp/language/destructor далі сам шукай
#W1T1Z3/PDU / @hate-engine --> #W1T1Z3/LR8 / 3611 дней назад

@dzhon это не пример. это я так реализую оператор копирования через конструктор копирования у объектов не бросающих эксепшоны в копи-конструкторе и деструкторе

#W1T1Z3/I6U / @hirthwork --> #W1T1Z3/0I1 / 3611 дней назад

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

#W1T1Z3/PQS / @hirthwork --> #W1T1Z3/I6U / 3611 дней назад
@hirthwork хацкер
#W1T1Z3/MR0 / @dzhon --> #W1T1Z3/PQS / 3611 дней назад

@dzhon жаваблядь

#W1T1Z3/L3R / @hirthwork --> #W1T1Z3/MR0 / 3611 дней назад
@hate-engine засчитан
#W1T1Z3/0R0 / @anonymous --> #W1T1Z3/PDU / 3611 дней назад
@hirthwork tfw не очевидно толи проявляешь смекалочку, толи творишь хуйню
#W1T1Z3/9BL / @mugiseyebrows --> #W1T1Z3/I6U / 3611 дней назад

@mugiseyebrows хуйню бы я творил, если бы применял этот приём для всех объектов без разбора. а с учётом того что я таки проверяю noexcept, то таки я творю будущее

#W1T1Z3/KQB / @hirthwork --> #W1T1Z3/9BL / 3611 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.