Matwey
Есть одно шикарное правило - не оптимизируй то, что не надо. А я испытываю сомнения, что это едмнственное, что тебе показал профилировщик
Друг, мне кажется, ты не прочитал начала дискуссии и сейчас споришь с какими-то потусторонними духами.
Dmitry
Приветствую! Небольшой вопрос по поводу nothrow версии оператора new. В стандарте внутри хедера new присутствует такое определение struct nothrow_t {}; extern const nothrow_t nothrow; Как так получилось что nothrow имеет extern linkage? Это из-за совместимости сделано было? Вот отсюда не очень понятно почему https://stackoverflow.com/questions/13506234/what-is-the-use-of-stdnothrow-and-stdnew-handler-in-standard-header-file-ne Отсюда вопрос что делать если я хочу компилить с -nostdlib? Корректно ли добавить эту константу самому: //clang++ -std=c++14 -fno-exceptions -nostdlib -lc main.cpp #include <cstdio> #include <cstdlib> #include <new> #include <memory> const std::nothrow_t mynothrow; class foo { public: void* operator new(std::size_t count, const std::nothrow_t& tag) { std::printf("global op new called, size = %zu\n", count); return std::malloc(count); } void operator delete(void* ptr) noexcept { std::puts("global op delete called"); std::free(ptr); } }; int main(){ auto f = new (mynothrow) foo; } И еще обратил внимание на то, что у std::make_unique нет специализации для nothrow версии new. int main(){ auto f = std::make_unique<foo>(); // does not compile }
Dmitry
Специализации и не может быть, у типа может быть десяток разных переопределенных new.
Dmitry
я привел пример с сигнатурой из стандарта п.17.6.4.6 operator new(std::size_t, const std::nothrow_t&)
Dmitry
Не обязательно использовать наверное глобальную константу, new(std::nothrow_t()) тоже сойдёт.
Dmitry
int main(){ // error: cannot allocate function type 'std::nothrow_t ()' with new auto f = new (std::nothrow_t()) foo; }
Dmitry
new(my_supapapa_mempool&)?
Dmitry
лучше {}
действительно, но все равно не понятно что же с external linkage
Dmitry
new(my_supapapa_mempool&)?
Вы имеете ввиду placement new? А я хотел обычную версию которая с malloc-ом внутри
Dmitry
Вы имеете ввиду placement new? А я хотел обычную версию которая с malloc-ом внутри
Нет, я к тому что явный nothtrow_t лучше чем {}, это же может быть и не placement new а например new со совсем кастомным параметром.
Dmitry
Тип здесь только для разрешения overload, так что неважно откуда он возьмётся из глобальной переменной с external linkage или из rvalue.
Dmitry
О, и {} не сработает же :) туплю...
Dmitry
у меня работает оба варианта вроде)
Dmitry
Если совсем custom приделывать, главное не забыть с той же сигнатурой delete иначе при исключении в конструкторе будет утечка.
Dmitry
Понял, благодарю
Dmitry
Хм, а вот интересно, может быть custom перегрузка new nothrowing?
Dmitry
с бОльшим число параметров?
Dmitry
Т.е. делает ли компилятор проверку на nullptr после вызова пользовательской перегрузки?
Dmitry
с бОльшим число параметров?
Не обязательно, new(my_notrow_t())
Dmitry
на nullptr пользователь вроде как проверять должен, как malloc
Dmitry
В конечном итоге внутри перегрузки надо будет вызвать стандартный nothrow new я так понимаю, а в нем проверок нет _LIBCPP_WEAK void* operator new(size_t size, const std::nothrow_t&) _NOEXCEPT { void* p = 0; #ifndef _LIBCPP_NO_EXCEPTIONS try { #endif // _LIBCPP_NO_EXCEPTIONS p = ::operator new(size); #ifndef _LIBCPP_NO_EXCEPTIONS } catch (...) { } #endif // _LIBCPP_NO_EXCEPTIONS return p; }
Dmitry
на nullptr пользователь вроде как проверять должен, как malloc
Пользователь там слова вставить не может, компилятор дернет new, а потом на полученном куске памяти вызовет конструктор.
Dmitry
Если тип не тривиальный, то надо разворачивать стек и вызывать деструкторы для тех, кого уже успел создать получается
Dmitry
Это да, хотя в данном случае разворачивать пока нечего.
Dmitry
Для стандартной сигнатуры с nothrow_t проверка гарантированно есть.
Dmitry
А для нестандартной?
Dmitry
Я просто еще подумал, что будет делать рантайм если на пути создания между базо вым классом и целевым (по иерархии) new вдруг вернет nullptr?
Dmitry
Варианты: - проверки нет - проверка есть если первый аргумент с типом std nothrow_t - проверка есть если хоть один аргумент такой - проверка есть всегда
Dmitry
Я просто еще подумал, что будет делать рантайм если на пути создания между базо вым классом и целевым (по иерархии) new вдруг вернет nullptr?
Наследование в цпп таково что память для наследника выделяется вместе с базовыми классами :)))
Dmitry
а если внутри конструктора еще для полей new делать
Dmitry
а если внутри конструктора еще для полей new делать
Тогда да, вызов деструкт для уже сконструированных и потом вызов delete, соответсвующего сигнатуре new.
Dmitry
И если перегрузки нет, утечка.
Matwey
/report
Anonymous
/report
Reported to 1 admin(s)
Dmitry
Просто проверка на nullptr это обычно пессимизация, интересно как это учитывается для расширенных перегрузок.
Dmitry
Просто проверка на nullptr это обычно пессимизация, интересно как это учитывается для расширенных перегрузок.
О, оно в дефектах торчит... http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html Сейчас просто shall, значит nullptr check должен быть, предлагают если не noexcept заменить на UB.
Dmitry
Хе, тогда у Дмитрия его перегрузка без noexcept внезапно станет UB?
Dmitry
Есть devops и backend?
Cuno
В boost::iostreams есть адаптер, который из direct Source сделает indirect? ( https://www.boost.org/doc/libs/1_66_0/libs/iostreams/doc/concepts/direct.html )
Dmitry
Хе, тогда у Дмитрия его перегрузка без noexcept внезапно станет UB?
А, ну это не перегрузка по идее, noexcept же нынче часть сигнатуры.
Khusrav
Qt 5.4 Привет друзя у меня вопрос во время статическая сборка проект Project ERROR: Unknown module(s) in QT: webkitwidgets webkit как решить ? но просто пустая форма собираеть очен извеняюс помогите пожалуйсто
Khusrav
вот это
ed
ой фу, qmake.. Вам скорее @supapro Или сюда @qt_chat
Khusrav
ой фу, qmake.. Вам скорее @supapro Или сюда @qt_chat
спасибо есть ли какой небуд интерфейс для создания графический интерфей с С++
Dmitry
А, ну это не перегрузка по идее, noexcept же нынче часть сигнатуры.
А значит name lookup закончится на class-scope и если дефект примут, оно тут станет UB без noexcept.
ed
спасибо есть ли какой небуд интерфейс для создания графический интерфей с С++
Помимо qt знаю лишь про gtk+glade Но qt по-моему лучший выбор, если лицензия позволяет..
Денис
хотя для версии 5.4 незнаю
Денис
Именно webkit
Khusrav
Именно webkit
да исползуется mingw
Денис
Точно знаю что в последних версиях webkit как модуль не поставляется для mingw
Денис
для msvc да, а вот для mingw убрали
Denis
Точно знаю что в последних версиях webkit как модуль не поставляется для mingw
в последних версиях он вообще не поставлятся, там вебэнжин :)
Khusrav
в последних версиях он вообще не поставлятся, там вебэнжин :)
статически линковка мне очен нужен именно webview очен нужно
Khusrav
в последних версиях он вообще не поставлятся, там вебэнжин :)
помогите пожалуйсто есть какой не буд уроки для это что делать надо
Денис
Попробуй webenginewidgets webengine webenginecore
Denis
Попробуй webenginewidgets webengine webenginecore
у него xp и мингв. И соответственно старый кьют, там нет вебэнжина
Denis
помогите пожалуйсто есть какой не буд уроки для это что делать надо
тебе еще вчера сказали что тебе не надо пилить свой велосипед, особенно когда у тебя нет опыта совсем. Статик линковка кьюта это занятие для сильных духом и я вот вообще не уверен что вебкит можно например. Возьми любой браузер и поставь туда плагин с киоск модом и будет тебе счастье
Denis
я не трус я этого делаю это мне нужно
ну тогда копай. Я вот более чем уверен, что в кьютешном чатике (а тут тем более) не найдется человека, который делал такую экзотику, а тем более который помнит как это было. Это же версии трехлетней давности
Denis
но статическая линковка всегло нужно вы как этого делайте
конкретно мы (наш проект) линкуем динамически, как и большинство пользователей кьюта
Denis
оооо все *.dll ки лудше или один *.exe ?
еще лучше, когда используются *.so, установленные в /usr/lib, лол. Но если серьезно, то я не шучу про то, что динамическая линковка кьюта это основной и рекомендуемый способ
Denis
я не очень понимаю что именно ты просишь. Ссылку на изучение как сделать приложение на кьюте? http://doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html Ссылку на то, как делать динамик линковку? Ну там вроде ничего специально делать не надо, ставишь из онлайн инсталлера и используешь
mefest
оооо все *.dll ки лудше или один *.exe ?
Ну dll не просто так придумали, свои плюсы имеют
Konstantin
dll hell
Anonymous
Привет всем
Max
Hello, World
Anonymous
https://m.lenta.ru/news/2018/04/13/telegram_finish/amp/
Michael
Ушлёпки!