-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80




Форум на Исходниках.RU


Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://forum.sources.ru.
Данный дневник сформирован из открытого RSS-источника по адресу http://forum.sources.ru/yandex.php, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

goto vs break & continue

Вторник, 14 Июля 2020 г. 09:19 + в цитатник
applegame:
Цитата Qraizer @
На, вот. Отрыл-таки в Клубе энтот твой scope. Без Поиска, он не работает. Скопипасчу, не жалко.
Спасибо, что лишний раз подтвердил убогость и уродство плюсов.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834221


Метки:  

goto vs break & continue

Вторник, 14 Июля 2020 г. 06:11 + в цитатник
OpenGL:
Цитата Wound @
Зачем такую путаницу вводить - совершенно не понятно. По мне так проще QUnique_ptr/QShared_ptr/QWeak_ptr нарисовать и не вводить людей в заблуждение.

Это пошло ещё с самого зарождения Qt, тогда программировали по другому и всё, что тут писалось выше, ещё толком не было широко распространено. Ну и да, ты прав, по духу Qt это скорей "си с классами" библиотека, нежели плюсовая, и многие прожженые плюсовики её недолюбливают. Я сам ругаюсь на неё местами. И время от времени слышу, что "кутешник" это почти что ругательство в среде плюсовиков :D

Цитата Wound @
Там поди и не все фишки новых стандартов нормально юзнешь?

Да какой там новых. Там даже move конструкторов для тамошних смартпоинтеров не предусмотрено :D Так что если мне нужно сделать смартпоинтер, который вызывает deleteLater (это qt-way способ безопасно удалить QObject из любого потока), то я предпочитаю написать unique_ptr с кастомным deleter-ом, чем юзать QScopedPtr даже несмотря на то, что последний умеет удалять указатели на qobject посредством deleteLater из коробки.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834218


Метки:  

goto vs break & continue

Вторник, 14 Июля 2020 г. 01:20 + в цитатник
Qraizer: На, вот. Отрыл-таки в Клубе энтот твой scope. Без Поиска, он не работает. Скопипасчу, не жалко.
    namespace ScopeD
    {
    class SuccessCase {} success;
    class FailureCase {} failure;
    class DoneCase {} done;
    class scope
    {
    std::function fn1, fn2;
    public:
    template scope(SuccessCase, T&& cl) try : fn1(std::move(cl)), fn2([](){}) {} catch (...) { throw; }
    template scope(FailureCase, T&& cl) try : fn1([](){}), fn2(std::move(cl)) {} catch (...) { cl(); throw; }
    template scope(DoneCase, T&& cl) try : fn1(std::move(cl)), fn2(fn1) {} catch (...) { cl(); throw; }
    ~scope() { if (std::uncaught_exceptions() != 0) fn2(); else fn1(); }
    };
    }
И использование последнего примера отсюда тоже
    using namespace ScopeD;
    struct Foo
    {
    Foo(std::string s) { std::cout << s; }
    ~Foo() { std::cout << "1"; }
    };
    try
    {
    scope guard1(done, [](){ std::cout << "2"; });
    scope guard2(success, [](){ std::cout << "3"; });
    Foo f("0");
    scope guard3(failure, [](){ std::cout << "4"; });
    throw std::runtime_error("runtime");
    scope guard4(done, [](){ std::cout << "5"; });
    scope guard5(success, [](){ std::cout << "6"; });
    scope guard6(failure, [](){ std::cout << "7"; });
    }
    catch (const std::exception& e)
    {
    std::cout << "Exception: " << e.what();
    }
    std::cout << std::endl;

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834214


Метки:  

goto vs break & continue

Вторник, 14 Июля 2020 г. 01:18 + в цитатник
JoeUser:
Цитата Qraizer @
Вот поэтому я и выкинул Qt на головы.

Ну а я на свою голову освоил, надо было GUI под FreeBSD+кеды когда-то лепить. Но никогда не был этой либой доволен - любой продукт на ней истекает жЫром. Вот поэтому я и обратил свой взор на nana. 2 меговый хелоуворлд меня устраивает, пострипанный Qt-шны 27 меговый - бесит.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834213


Метки:  

TLS ("thread-local storage", не "transport layer security")

Вторник, 14 Июля 2020 г. 01:04 + в цитатник
JoeUser:
Цитата Qraizer @
поменяла семантику этой ранее static переменной.

В многпоточном исполнении - там не одна же переменная! Там одна копия переменной на один поток. Каждый поток юзает свою копию? И если "да", то что не так?

https://forum.sources.ru/index.php?showtopic=419143&view=findpost&p=3834212


Метки:  

goto vs break & continue

Вторник, 14 Июля 2020 г. 01:02 + в цитатник
Qraizer: Вот поэтому я и выкинул Qt на головы. На кой хрен ещё один managed с++ по-над ещё одним дотНетом? Отказоустойчивости нет, обобщённости нет, населена велосипедами.

Добавлено
Цитата applegame @
Как хорошо в D, в котором есть scope(exit). И не нужно ни goto ни бестолковых классов.
Ой-ой-ой, а правильный скоп влеплять каждый раз никто не забывает, ага.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834211


Метки:  

TLS ("thread-local storage", не "transport layer security")

Вторник, 14 Июля 2020 г. 00:50 + в цитатник
Qraizer:
Цитата JoeUser @
Ну, получается получается простая замена static на thred_local позволяет нам получить желаемое многопоточное использование?
Если считать
    6804: the trdLocalVar is -1 now
    6e1c: the trdLocalVar is -1 now
    4060: the trdLocalVar is -1 now
    3fe4: the trdLocalVar is -1 now
    6e1c: the trdLocalVar is -1 now
    3fe4: the trdLocalVar is -1 now
    6804: the trdLocalVar is -1 now
    3fe4: the trdLocalVar is -1 now
    4060: the trdLocalVar is -1 now
    3fe4: the trdLocalVar is -1 now
вместо
    45cc: the trdLocalVar is 1 now
    1110: the trdLocalVar is 2 now
    5534: the trdLocalVar is 3 now
    4b44: the trdLocalVar is -1 now
    1110: the trdLocalVar is 2 now
    4b44: the trdLocalVar is -1 now
    45cc: the trdLocalVar is 1 now
    4b44: the trdLocalVar is -1 now
    5534: the trdLocalVar is 3 now
    4b44: the trdLocalVar is -1 now
желаемым многопоточным результатом, то да. Ты не забыл, что в q() из src.cpp видимая ею trdLocalVar разная и зависит от того, какая из трёх запущенных параллельно thr() из main.cpp её вызвала? thread_local поменяла семантику этой ранее static переменной.

https://forum.sources.ru/index.php?showtopic=419143&view=findpost&p=3834210


Метки:  

goto vs break & continue

Вторник, 14 Июля 2020 г. 00:48 + в цитатник
JoeUser:
Цитата Wound @
Зачем такую путаницу вводить - совершенно не понятно.

Первый релиз Qt состоялся с 1996 году, какие нахрен shared_ptr тогда? Тогда код писали на ламповых мониторах!

Добавлено
Цитата Wound @
Там поди и не все фишки новых стандартов нормально юзнешь?

Все, что касается производных от QObject - с опаской. За использование исключений - расстрел сразу! Но тут я ни разу не парюсь, вон Rust тоже не парится.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834209


Метки:  

TLS ("thread-local storage", не "transport layer security")

Вторник, 14 Июля 2020 г. 00:39 + в цитатник
JoeUser:
Цитата Qraizer @
P.S. Вариант с thread_local без extern ничего не поменяет. Всё равно в src1 и src2 это будут разные объекты.

Тогда не понимаю, о чем ты споришь :)

Смотри

static. Для src1 и src2 - это разные объекты, принадлежащие своим единицам транстяции.
thread_local. Для src1 и src2 - это также разные объекты, принадлежащие своим единицам транстяции.

Разница лишь во времени существования. static - существуют все время жизни программы. А thread_local - время жизни потока.

Пусть есть однопоточная либа SRC и ее однопоточное использование:

    // src.h --------------------------------------------------------------------------
    #ifndef SRC_H
    #define SRC_H
    #include
    void set(int i);
    void prn();
    #endif // SRC_H
    // src.cpp ------------------------------------------------------------------------
    #include "src.h"
    static int State;
    void set(int i) {
    State = i;
    }
    void prn() {
    std::cout << State << std::endl;
    }
    // main.cpp -----------------------------------------------------------------------
    #include
    void func(int i) {
    set(i);
    prn();
    }
    int main() {
    func(12);
    return 0;
    }

Ничего необычного. Запустили функцию, которая вызвала изменение "состояния библиотеки" и потом печать. Увидели 12.

А теперь желаем эту либу использовать в многопоточной среде. В самой "либе" меняем static на thread_local. Ну а основную прогу переписываем под многопоточное исполнение:

    // src.h --------------------------------------------------------------------------
    #ifndef SRC_H
    #define SRC_H
    #include
    void set(int i);
    void prn();
    #endif // SRC_H
    // src.cpp ------------------------------------------------------------------------
    #include "src.h"
    thread_local int Value;
    void set(int i) {
    State = i;
    }
    void prn() {
    std::cout << State << std::endl;
    }
    // main.cpp -----------------------------------------------------------------------
    #include
    #include
    #include
    #include
    #include
    std::mutex Mutex;
    void func(int i) {
    set(i);
    std::this_thread::sleep_for(
    std::chrono::milliseconds(500 + ((std::rand() % 20) * 300))
    );
    std::lock_guard Guard(Mutex);
    std::cout << "(" << std::this_thread::get_id() << "): ";
    prn();
    }
    int main() {
    std::srand(343452345);
    std::thread trd1(func, 10);
    std::thread trd2(func, 20);
    std::thread trd3(func, 30);
    trd1.join();
    trd2.join();
    trd3.join();
    return 0;
    }

Как и ожидалось, выводятся разные цифры, те, которыми инициализировали функции потоков (типа у каждого потока свое состояние либы):

    (4): 30
    (2): 10
    (3): 20

Ну, получается получается простая замена static на thred_local позволяет нам получить желаемое многопоточное использование?

https://forum.sources.ru/index.php?showtopic=419143&view=findpost&p=3834208


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 23:31 + в цитатник
Wound:
Цитата JoeUser @
Может. Ибо разрабы в QObject встроили звездолет, и для этого придумали свой дополнительный инструментарий - moc. Вот он-то и занимается тем, что на основе метаинформации начинает творить "чудеса".

И тем не менее, если написать new от класса-не потомка QObject - автоматического удаления не будет, ибо moc это не обрабатывает. Это по твоему примеру:

Поэтому и не знаешь что такое RAII и лепишь вские goto куда не попадя. А если кто то напишет у себя что то типа typedef unsigned int QUintPrimitive - то и утечку поиметь не долго.


Цитата JoeUser @
Тут правильно пишут. Ибо если я напишу вот так:

Вообще огонь. Зачем такую путаницу вводить - совершенно не понятно. По мне так проще QUnique_ptr/QShared_ptr/QWeak_ptr нарисовать и не вводить людей в заблуждение. Может это маркетинговый ход такой? Типа был нормальный С++сник, с годика два пописал на QT, и на С++ уже программировать не может, только на QT и остается писать, какой то свой изолированный от реальности мир этот ваш QT. Там поди и не все фишки новых стандартов нормально юзнешь?

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834207


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 23:21 + в цитатник
JoeUser:
Цитата Wound @
Кинь пруфы на документацию, что оно работает так, как ты пишешь.

Лень доки рыть. Кину на краткое описание механизма, там вроде понятно расписали - "Qt владение «объектами» (T * и const T *)"

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834206


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 22:47 + в цитатник
JoeUser:
Цитата Wound @
Я больше склоняюсь к тому, что ты ошибся. Не может так быть.

Может. Ибо разрабы в QObject встроили звездолет, и для этого придумали свой дополнительный инструментарий - moc. Вот он-то и занимается тем, что на основе метаинформации начинает творить "чудеса".

И тем не менее, если написать new от класса-не потомка QObject - автоматического удаления не будет, ибо moc это не обрабатывает. Это по твоему примеру:

Цитата Wound @
А если я напишу:
    int* pI = new int;



Добавлено
Цитата Wound @
Вот к слову тут пишут что надо удалять ручками, либо юзать обертки: https://forum.qt.io/topic/80357/should-i-de...ocal-function/3

Тут правильно пишут. Ибо если я напишу вот так:
    QPushButton *B = new QPushButton("Акей");
    QVBoxLayout *L = new QVBoxLayout();
    // без следующих двух строчек
    // L->addWidget(B);
    // setLayout(L);

Будет утечка памяти, т.к. переменные B и L никому во владение не передаются. В таком случае, там же правильно предлагают использовать QScopedPointer. Но что объявление кнопки и ее неиспользование, что размещение QString в куче и отсутствие передачи указателя куда-то, кто удалит - это дичь.

Добавлено
Цитата OpenGL @
Забыть написать освобождение ресурса во время написания RAII обёртки для этого ресурса это сильно

Ну а чо? Я вон при cleanup сокета забыл сделать shutdown ему. По описалову - моя программа падать не будет, и система падать не будет. Будет только разница в поведении ранее созданного соединения, которое без shutdown будет по прежнему принимать TCP-пакеты, а в ответ молчать.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834205


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 21:53 + в цитатник
Wound:
Цитата Qraizer @
Тем, что в случае Qt это не обязательно ошибка. Передавая ресурс в нутря Qt, ты передаёшь ему владение, согласно договорённости с Qt, тогда как присваивая поинтер на хип сырому указателю, никому ничего не передаёшь и по-прежнему сам отвечаешь за энтот поинтер. Сравни:

Так я и говорю - смешение семантики языка с логикой выходит.

Когда ты пишешь вон как с std::shared_ptr - то в данном случае у тебя во первых разные типы данных с лева и с права.
Попробуй тогда уж написать по аналогии с QT:
    std::shared_ptr* pI = new std::shared_ptr();


Потому как с std::shared_ptr - сразу видно, что тут используется враппер, а когда ты пишешь:
    QPushButton *B = new QPushButton("Акей");

Тут из этого вообще никак не очевидно что ты пишешь враппер. Я во первых бы обернул это по привычке в std::unique_ptr, ну или на крайняк дальше по коду вызвал бы -> delete B;, а если дальше бы по коду оно упало у меня, то справедливо бы обматерил разрабов QT.
А в данном случае что происходит? Оно внутри делает delete *this?
Во первых это вообще не очевидно, во вторых - пописав годик вот на таком, ты по привычке везде будешь так писать, забыв вызвать delete, да и RAII тебе в таком случае нафиг не нужно, ты же привык что у тебя память сама освобождается. По мне так очень стремная практика. Даже в COM - и то юзаются врапперы.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834204


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 21:48 + в цитатник
applegame: Как хорошо в D, в котором есть scope(exit). И не нужно ни goto ни бестолковых классов.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834203


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 21:40 + в цитатник
Qraizer:
Цитата Wound @
А если я напишу:
    int* pI = new int;

Оно мне тоже память почистит? Если нет, то в чем этот код отличается от:
Цитата JoeUser @
    QPushButton *B = new QPushButton("Акей");
    QVBoxLayout *L = new QVBoxLayout();
    L->addWidget(B);
    setLayout(L);

???
Тем, что в случае Qt это не обязательно ошибка. Передавая ресурс в нутря Qt, ты передаёшь ему владение, согласно договорённости с Qt, тогда как присваивая поинтер на хип сырому указателю, никому ничего не передаёшь и по-прежнему сам отвечаешь за энтот поинтер. Сравни:
    std::shared_ptr pI = new int;

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834202


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 20:17 + в цитатник
OpenGL:
Цитата JoeUser @
Ага и в деструкторах главное не забыть написать нужную функцию освобождения библиотечного ресурса. В плане с goto - та же проблема не забыть.

Забыть написать освобождение ресурса во время написания RAII обёртки для этого ресурса это сильно

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834201


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 17:28 + в цитатник
Wound:
Цитата JoeUser @
Не знаю, и я об этом спрашивал на SO - тоже молчат. Если это обязательная последовательность диалога с SFTP, она должна быть в коде. А если нет - можно выбросить. Но я так и не нашел норм описание SFTP, т.к. RFC на него нету, а есть только draft-доки от IETF.

:wacko: В конкретно данном случае - если ты выкинешь из кода fingerprint - это вообще ни на что не повлияет. Это ясно даже без доки.

Цитата JoeUser @
Ага и в деструкторах главное не забыть написать нужную функцию освобождения библиотечного ресурса. В плане с goto - та же проблема не забыть.

Я же пишу - это не тривиальная задача забыть в деструкторе написать освобождение. А вот с goto - это тривиальная задача. Обертку тебе нужно писать ровно 1 раз, потом раз ты в конструкторе выделяешь ресурс, значит если деструктор будет отсуствовать или он будет пустой - уже повод задуматься что ты вообще делаешь и нахрена ты такое пишешь.

Добавлено
Цитата JoeUser @
L->addWidget(B); - L запоминает потомка B, перед своим удалением - он его удалит
setLayout(L); - текущий виджет запоминает потомка L, перед своим удалением - он его удалит

Таким образом, мне в деструкторе делать ничо не нужно.

значит говно этот ваш QT, раз он смешивает семантику языка с логикой. В данном случае у тебя сырые указатели, я не понимаю - как он их удалит? Тут RAII и не пахнет. Разве что он как JAVA периодически подчищает ресурсы, но это уже сродни языку, а не фреймворку или что это вообще?

Я бы понял вот такой пример:
    QPushButton B = new QPushButton("Акей");
    QVBoxLayout L = new QVBoxLayout();
    L->addWidget(B);
    setLayout(L);


В таком виде - все ок, никаких неоднозначностей нет. А вот конкретно в том виде, в котором написал ты - у меня возникает много вопросов. Либо ты не верно понимаешь работу QT.

Добавлено
Вот к слову тут пишут что надо удалять ручками, либо юзать обертки: https://forum.qt.io/topic/80357/should-i-de...ocal-function/3

Добавлено
Да и это было бы довольно странно как ты написал. Кинь пруфы на документацию, что оно работает так, как ты пишешь. Потому что у меня закрадываются сомнения. Как оно понимает что я работаю с указателем и что в конкретном месте нужно освободить из под него память? Это анриал, это уже какая то Java получается, но даже там не знают когда надо освобождать память, поэтому собственно С++ еще и существует как язык.

Добавлено
А если я напишу:
    int* pI = new int;

Оно мне тоже память почистит? Если нет, то в чем этот код отличается от:
Цитата JoeUser @
    QPushButton *B = new QPushButton("Акей");
    QVBoxLayout *L = new QVBoxLayout();
    L->addWidget(B);
    setLayout(L);

???
Я больше склоняюсь к тому, что ты ошибся. Не может так быть.

Добавлено
Хотя если он там у себя внутри делает какой нибудь delete *this, может и будет работать(я уже два года на плюсах не писал, немного забывается), но всеравно это говноподход ИМХО, таким подходом всякие COM страдали на первых этапах, и то для них давно написаны RAII Обертки типа там ComPtr

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834199


Метки:  

TLS ("thread-local storage", не "transport layer security")

Понедельник, 13 Июля 2020 г. 17:13 + в цитатник
Qraizer: И ещё раз нет. static делает имя локальным в единице трансляции, и это не то же самое, что локальное имя в потоке. static обеспечивает локальность имени на основе статического деления программы на единицы трансляции, thread_local – на основе динамического разделения программы на потоки. Поток может вызвать функции из других единиц трансляции, и есть очень большая разница между глобальными объектами с внутренним связыванием и локальными в потоке объектами с внешним связыванием.

Добавлено
Вот более детальный пример:
    // ------------ thrd.h
    #ifdef THREAD_LOCAL
    extern thread_local int trdLocalVar;
    #else
    static int trdLocalVar = -1;
    #endif
    void g();
    // ------------ src1.cpp
    #include
    #include
    #include
    #include
    #include "thrd.h"
    std::mutex out;
    void g()
    {
    std::lock_guard ct(out);
    std::cout << std::hex << std::setw(8) << std::this_thread::get_id() << ": the trdLocalVar is "
    << std::dec << trdLocalVar << " now" << std::endl;
    }
    // ------------ src2.cpp
    #include
    #include
    #include
    #include
    #include "thrd.h"
    #ifdef THREAD_LOCAL
    thread_local int trdLocalVar = -1;
    #endif
    std::mutex mtx;
    std::array events;
    void thr(int n)
    {
    trdLocalVar = n;
    g();
    std::lock_guard ev(events[n-1]);
    std::lock_guard ct(mtx);
    g();
    }
    int main()
    {
    using namespace std::literals;
    for (auto &i : events) i.lock();
    std::thread trd1(thr, 1);
    std::thread trd2(thr, 2);
    std::thread trd3(thr, 3);
    g();
    std::this_thread::sleep_for(2s);
    events[1].unlock();
    trd2.join();
    g();
    events[0].unlock();
    trd1.join();
    g();
    events[2].unlock();
    trd3.join();
    g();
    }
Результат при наличии THREAD_LOCAL:
    bc4: the trdLocalVar is 1 now
    f1c: the trdLocalVar is 2 now
    198c: the trdLocalVar is 3 now
    654: the trdLocalVar is -1 now
    f1c: the trdLocalVar is 2 now
    654: the trdLocalVar is -1 now
    bc4: the trdLocalVar is 1 now
    654: the trdLocalVar is -1 now
    198c: the trdLocalVar is 3 now
    654: the trdLocalVar is -1 now
Результат без него легко предсказать: все строчки будут "... is -1 now".

Добавлено
P.S. Вариант с thread_local без extern ничего не поменяет. Всё равно в src1 и src2 это будут разные объекты.

https://forum.sources.ru/index.php?showtopic=419143&view=findpost&p=3834198


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 17:10 + в цитатник
JoeUser:
Цитата Wound @
Так а какой тогда смысл в переменной fingerprint ?

Не знаю, и я об этом спрашивал на SO - тоже молчат. Если это обязательная последовательность диалога с SFTP, она должна быть в коде. А если нет - можно выбросить. Но я так и не нашел норм описание SFTP, т.к. RFC на него нету, а есть только draft-доки от IETF.

Цитата OpenGL @
управление всеми ресурсами отдавать деструкторам

Ага и в деструкторах главное не забыть написать нужную функцию освобождения библиотечного ресурса. В плане с goto - та же проблема не забыть.

Добавлено
Цитата Wound @
Ты когда у себя где то пишешь T* ptr = new T - ты потом память не освобождаешь что ли?

Всегда освобождаю. Но в Qt есть есть свой механизм, когда удалять не нужно, даже противопоказано. Пример в конструкторе:
    ...
    QPushButton *B = new QPushButton("Акей");
    QVBoxLayout *L = new QVBoxLayout();
    L->addWidget(B);
    setLayout(L);


L->addWidget(B); - L запоминает потомка B, перед своим удалением - он его удалит
setLayout(L); - текущий виджет запоминает потомка L, перед своим удалением - он его удалит

Таким образом, мне в деструкторе делать ничо не нужно.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834197


Метки:  

TLS ("thread-local storage", не "transport layer security")

Понедельник, 13 Июля 2020 г. 17:01 + в цитатник
JoeUser:
Цитата Qraizer @
JoeUser, как это что-либо меняет?

Ну просто мне запомнилось, что threal_local "подразумевает статический спецификатор класса хранения". Но я забыл где об этом читал. Решил пререспросить "а если заменить все описатели static на аналоги c thread_local ...". Ты ответил нет. Но все же получается "дa" ... Для однопоточной среды static будет хранить одну копию данных. В многопоточной среде, если использовать thread_local - для каждого потока будет своя копия, аналогичная static - для однопоточной среды.

https://forum.sources.ru/index.php?showtopic=419143&view=findpost&p=3834195


Метки:  

Поиск сообщений в rss_forum_sources_ru
Страницы: 2628 ... 2375 2374 [2373] 2372 2371 ..
.. 1 Календарь