|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Что то не выходит, валится приложение. И std::string пробовал и char, char *, char[]))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 14:06 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Если ничего не помогает, вызывайте так, как описано в заголовке/документации. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 14:08 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Указатель как объявлен? Если это экспортируемая из DLL функция, то как-то так Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 14:29 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T, Спасибо. Оказалось банальность в высшей степени. Не успел присваивать в класс поле адрес функции. В результате там null или мусор.... И главное отладчик пишет SIGSEGV от операционки. Ну я и не догадался что там пусто. .... Работает простой std::string. Везде его стараюсь. ... Счас попробую на if nulll проверки добавить. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 14:35 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Возможно студия показывает более вменяемое сообщение на данный юзкейс чем Qt Creator. Imho ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 14:42 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC SharpИ главное отладчик пишет SIGSEGV от операционки. Так собирать надо с отладочной информацией. Тогда он и место покажет, и call stack. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 14:58 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Думаю тут автоматом это режим. Как и в студии. Кнопа - отладка. Бряк на вызове функции возле main() из класс поставил. При входе в метод падение. Я заметил что в плюсах надо руками инициализировать поля указатели. If (p) не работает из коробки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:20 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Адрес при ошибке (мусор) - 0х56 Адрес после pointerMy = nullptr; 0x0 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:27 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Я заметил что в плюсах надо руками инициализировать поля указатели. If (p) не работает из коробки. Любые указатели надо инициализировать нулем или конкретным значением. Это не C# где автоматом нули по умолчанию. В С/С++ просто выделяется память под хранение указателя, а значением становится тот мусор, который остался с прошлого использования этой памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:29 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima TЛюбые указатели надо инициализировать нулем или конкретным значением. Я даже больше скажу: переменные любого типа надо инициализировать. Причём компилятор имеет привычку предупреждать об использовании неинициализированных переменных, но кто ж эти "многа букафф" читает?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:33 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T PetroNotC Sharp Я заметил что в плюсах надо руками инициализировать поля указатели. If (p) не работает из коробки. Любые указатели надо инициализировать нулем или конкретным значением. Это не C# где автоматом нули по умолчанию. В С/С++ просто выделяется память под хранение указателя, а значением становится тот мусор, который остался с прошлого использования этой памяти. Да. Добавил Код: plaintext 1. 2.
А жаль. Чем продиктовано что не как в шарпе? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:35 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC SharpЧем продиктовано что не как в шарпе? Шарп появился как "С++ для дебилов", а не наоборот. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:38 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov PetroNotC SharpЧем продиктовано что не как в шарпе? Шарп появился как "С++ для дебилов", а не наоборот.)))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:40 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Чем продиктовано что не как в шарпе? Производительностью. Запись нулей - не всегда нужная операция, но процессорное время на нее надо будет тратить всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:43 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T, Ну, время наверно сопоставимо с инициализацией всего класса? Я чисто про класс говорю. Тем кому время критично наверно без классов работают. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:48 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC SharpНу, время наверно сопоставимо с инициализацией всего класса? Ты не поверишь, но у классов тоже нет инициализации кроме явной в конструкторах. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:55 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Dima T, Ну, время наверно сопоставимо с инициализацией всего класса? Я чисто про класс говорю. Тем кому время критично наверно без классов работают. Инициализация объекта - это присвоение явно прописанных значений полям, запуск конструкторов полей и выполнение конструктора класса. Если ничего перечисленного нет, то на инициализацию класса не тратится ни одного процессорного такта. Вобщем если что-то явно не прописали - С/С++ считает это лишним. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:55 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T PetroNotC Sharp Чем продиктовано что не как в шарпе? Производительностью. Запись нулей - не всегда нужная операция, но процессорное время на нее надо будет тратить всегда. строго говоря да, "производительностью". Но у идеи такого поведения есть полезный побочный эффект, который в "других местах" может проявляться ленивым выделением памяти, например. смысл происходящего заключается в создании объекта в частично сформированном состоянии . Там где заполняют нулями принудительно, считают, что нам таких объектов не нать. Там, где не заполняют - считают, что это правомерное состояние, а полное состояние сформируется позднее. В этом смысле, чтение до записи, в языках сорта C, является обыкновенной ошибкой програмиста. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 15:56 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby, Вы намекаете на анализ сего факта что если там мусор значит объект еще не родиля и на 6м месяце? А как вы проверите что там мусор и объект не полностью готов? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 16:43 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp booby, Вы намекаете на анализ сего факта что если там мусор значит объект еще не родиля и на 6м месяце? А как вы проверите что там мусор и объект не полностью готов? хоть на 36-м. Зачем нужен объект, и когда должен оказаться полностью сформированным - дело его создателя . Проверять ничего не надо . За готовность объекта к использованию на момент его фактического использования, когда состояние должно оказаться полностью сформированным, никто, кроме создателя, ответственности не несет. Это просто - хочешь "значения по умолчанию" - просто присвой его, имени себя, как создателя, конкретное умолчание, путем совмещенния объявления подходящей по типу переменной с конструированием любимого, или потребного в конкретном месте, "умолчания". у тебя эта парадигма, в этом языке от зубов на кончиках пальцев, без включения мозга, на полном автомате должна работать. Как правильные движения лыжного гонщика, велосипедиста или пловца. Однажды усвоенные движения невозможно вытеснить. При наступлении усталости новый навык "устаёт", и просыпается первоначальный. Если ты на шарпах первый навык получал, и "немного устал сегодня", то пальцы твои автоматически начнут рассчитывать на дефолтные привоения. Просто надо отдохнуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 16:58 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby, А я думал что за полезный побочный эффект))))) Короче, не расслабляйся) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 17:09 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, а что думаешь, легко было осваивать коньковый ход в лыжах тем, кто всю жизнь бегал классикой... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 17:12 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby, Ну, инициализацию фигурными скобками же добавили) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 17:23 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp booby, Ну, инициализацию фигурными скобками же добавили) это же ничего не меняет по смыслу. ты как был бог, так им и остаёшься. Что напишешь в эти скобки, так мир и окажется устроен. В своих структурах/классах ты можешь рулить конструкторами по умолчанию, представляя себе разумное поведение, формируя его полностью, или сознательно оставляя часть структуры, а значит - сам объект, в неполностью сформированном состоянии. В последнем случае - ты либо кодом для "как проверять" это дело снабжаешь, или/и конструкторами, позволяющими получить полностью сформированный объект. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 17:42 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Я даже больше скажу: переменные любого типа надо инициализировать. Причём компилятор имеет привычку предупреждать об использовании неинициализированных переменных, но кто ж эти "многа букафф" читает?.. в C++ же конструкторы этим занимаются, которых не было в C. И они же гарантируют, что не будет мусора. Классы в C++ сделаны для увеличения автоматизма и уменьшения ошибок. А вот так зачем в C++ писать непонятно: PetroNotC Sharp Код: plaintext 1. 2.
это же "naked pointer", который "НЕЛЬЗЯ" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 17:59 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020в C++ же конструкторы этим занимаются, которых не было в C. И они же гарантируют, что не будет мусора. Занимаются если они написаны. Гарантируют они ровно то, что в них написано. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 18:04 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp А как вы проверите что там мусор и объект не полностью готов? Никак, это заранее надо предусмотреть разработчику класса. ООП гласит что объект сразу должен быть инициализирован, но если разработчик решает что некоторые поля могут быть инициализированы мусором, то почему нет? Вот так сложилось в С++ что по умолчанию это инициализация мусором и менять это в стандарте вряд ли кто захочет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 18:07 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T ... ООП гласит что объект сразу должен быть инициализирован... вообще говоря, ничего близко подобного "ООП" гласить не может . И особенно, с учетом того, что понятие "состояние" в ООП относится, главным образом , к скрытой, снаружи не видимой части состояния объекта там, где это "про ООП". Но нечто подобное, действительно, гласят, некоторые интертрепаторы ООП и изобретатели "самых безопасных в мире языков". Dima T Вот так сложилось в С++ что по умолчанию это инициализация мусором и менять это в стандарте вряд ли кто захочет. Думаю, что это исключено. По крайней мере, при жизни Страуструпа. Он, конечно, раб комитета, но не настолько, чтобы не суметь ему противостоять в принципиальных вопросах. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 18:13 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 это же "naked pointer", который "НЕЛЬЗЯ" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 18:37 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby, Мы выше выяснили, что полуобъект никакого смысла не имеет кроме скорости. Что не подтверждено кодом профи). Ну и в бизнес объектах добавляют флаг или перечислимое о том что он "сформирован" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 18:41 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp ... Ну и в бизнес объектах добавляют флаг или перечислимое о том что он "сформирован" это просто чепуха. "добавляют", но почти всегда не от большого ума. PetroNotC Sharp booby, Мы выше выяснили, что полуобъект никакого смысла не имеет кроме скорости. ... Похоже, вы не вполне поняли о чем идет речь. Забудьте про скорость. Те, кто считает, что вопрос только в скорости, автоматически влепляют в систему типов дефолтную инициализацию до полного состояния. Но, оказывается, в содержательных случаях, это левое движение, которое ни к чему не приближает. Здесь за вас просто не делают левого движения. Попробуйте испытать гордость. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 18:53 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Алексей Роза 2020 это же "naked pointer", который "НЕЛЬЗЯ" Страуструп против: NO naked pointers (Страуструп): a) keep them inside functions and classes; (тут имеется ввиду, что в классах будут RAII и прочие shared-ptrs) b) keep arrays out of interfaces (prefer containers); c) pointers are implementation-level artifacts; d) a pointer in a function should not represent ownership; e) always consider std::unique_ptr AND sometimes std::shared_ptr; // правила Herb Sutter: 1. prefer to allocate heap objects using make_unique/make_shared or containers. 2. otherwise, use owner<> for source/layout compatibility with old code. Each non-null owner<> must be deleted exactly once, or moved. 3. Never dereference a null or invalid Pointer. 4. Never allow an invalid Pointer to escape a function. Dimitry Sibiryakov Алексей Роза 2020в C++ же конструкторы этим занимаются, которых не было в C. И они же гарантируют, что не будет мусора. Занимаются если они написаны. Гарантируют они ровно то, что в них написано. мы же про C/C++ говорим, зачем повторять очевидное? C/C++ написаны так, что там ВСЁ зависит от программиста. Но тысячи Core Guidelines как бэ намекают, что таки есть некие правила . ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:03 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby, ОК, про скорость забыл. Главное не забыть инициализировать). Тут ведь третичная логика)). Да/нет/мусор )) Уже второй раз натыкаюсь на грабли. И IDE тоже нифига не помогает....в 21 веке. Повешу красный плакат перед носом)) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:06 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Алексей Роза 2020 это же "naked pointer", который "НЕЛЬЗЯ" Скажем так: не рекомендуется использовать. Можно потому что указатель под капотом тех же умных указателей и прочих классов STL. Указатели даже для С++ это рудимент унаследованный из С, в С++ изначально ввели ссылки чтобы хоть как-то проблемы с указателями сгладить, но указатели оставили. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:12 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp ... Тут ведь третичная логика)). Да/нет/мусор ... Здесь вы совершаете критическую ошибку. языкам программирования трехзначная логика и неприменение закона исключения третьего запрещены правительством США (это шутка, но с не сильно ошибочным содержанием). Нет никакого Да/нет/мусор Есть Да/нет/[неопределенное поведение], иначе см. на закон исключения третьего в п.1. Задача "безопасных" языков свести это к Да/нет. Вот и вся история. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:13 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp И IDE тоже нифига не помогает....в 21 веке. Повешу красный плакат перед носом)) Помогает, но ненавязчиво Dimitry Sibiryakov Причём компилятор имеет привычку предупреждать об использовании неинициализированных переменных, но кто ж эти "многа букафф" читает?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:14 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
мусор, не мусор - вот почему у меня время редактирования сообщения меньше времени его создания. Вот это настоящий вопрос/ ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:16 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020, А если у меня указатель просто переход на функцию глобальную в модуле main? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Никакие addref, release делать не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:18 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby мусор, не мусор - вот почему у меня время редактирования сообщения меньше времени его создания. Вот это настоящий вопрос/ Багофича sql.ru, ты не первый заметил 22208645 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:21 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima TПомогает, но ненавязчиво Поэтому лично я связкой "-Wall -Wextra -Werror" превращаю это в "навязчиво". И со времени, когда я начал так делать, количество багрепов резко уменьшилось. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:33 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Мы не путаем варнинг Переменная не используется в коде и просто нарушена очередность вызова. Вызвано до инициализации. Завтра проверю что она там мяукает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:46 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Хотя да, неинициализированные поля объектов оно не обнаруживает, к сожалению. Только локальные переменные. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:48 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Да. И это жаль. В методах оно задолбало так как всегда прототип пишешь, и только после цепляешь все параметры в бизнес логику кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 19:56 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Мы тут долго обсуждаем почему не ноли, а можно что-то добавить чтобы в своем проекте сделать инициализацию нолями? Просто сделать для себя как хочется, а не как принято. Глобально оператор new можно перегрузить и там прописать, а как быть с тем что на стэке размещается, типа Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 20:00 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Как тут говорят - класс(структура) это святое! Не трожь и не посыпай никаким синтаксическим сахаром! (с) Страуструп. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 20:00 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T, Я в Qt пишу. И там new практически не используется. Достаточно редко. Вот такие пироги. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 20:02 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T, Да давно уже пора сделать. А кто хочет перформанса дать опции наподобие DEBUG, пускай он эту механику выключит там где ему сильно нужно. Но я сомневаюсь что в мире ООП кто-то сильно оптимизирует создание объектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 20:26 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Dima T, Я в Qt пишу. И там new практически не используется. Достаточно редко. Вот такие пироги. Да, new это тоже опасный оператор, утечки памяти будут если накосячишь, поэтому используются обертки. Может ошибаюсь, с Qt незнаком, но без new в куче объект не разместить, а с объектами на стэке тоже далеко не уедешь. Подозреваю что new там есть глубоко закопанное, другой вопрос можно ли туда докопать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 20:41 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Скорее здесь стек играет роль презерватива. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 20:59 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T Мы тут долго обсуждаем почему не ноли, а можно что-то добавить чтобы в своем проекте сделать инициализацию нолями? Просто сделать для себя как хочется, а не как принято. Глобально оператор new можно перегрузить и там прописать, а как быть с тем что на стэке размещается, типа Код: plaintext 1. 2. 3.
как-то странно сам вопрос выглядит (вроде фигурные скобки уже были в топике). вообще-то это "инициализацией" называют. Вот рассказ как раз для фигурных скобок, например: https://habr.com/ru/post/436296/ А вообще, если именно "на стеке" хочется, то вроде как в C++ больше принято для такого хотения дело со Struct иметь, не? вот тут еще много букв с мультфильмами и перечислением 18 валидных способов инициализации целого (из которых первый - как раз не полностью сформированный объект). https://habr.com/ru/company/jugru/blog/469465/ ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 00:58 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Вот хорошее дефолтное поведение для компиллятора. Код: plaintext 1.
Для всех диких переменных сделали бы так. Убудет штоли? Или лишние такты процессора жалко? Что там этот лысый дядечка? Держится за старое? Компатибилити? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 01:10 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
mayton, а почему тебя ломает написать это своими ручками? Без этого слово "вечность" не соберется, так и поедешь к Герде цветы поливать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 01:20 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Алексей Роза 2020, А если у меня указатель просто переход на функцию глобальную в модуле main? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Никакие addref, release делать не нужно. Хм, а чё это у вас ф-я в глобале, а не в наследуемом классе, м? Тогда бы и указатель не нужен был. Надо просто за правило взять, что указатели в C++ - это плохо. вот, тоже правильно пишет: Dima T Скажем так: не рекомендуется использовать. Можно потому что указатель под капотом тех же умных указателей и прочих классов STL. Указатели даже для С++ это рудимент унаследованный из С, в С++ изначально ввели ссылки чтобы хоть как-то проблемы с указателями сгладить, но указатели оставили. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 01:38 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Я не про это. Я говорю что делать с наследием? С тысячами исходников которые уже написаны так Код: plaintext 1.
и наследуют поведение кота Шрёдингера. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 01:38 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
mayton, если без смеха, то моему глазу милее инициализация с круглыми скобками - int i3(42); просто потому, что по смыслу письма, эта форма означает вызов параметризованного конструктора. Что в меня гораздо проще въезжает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 01:39 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
mayton Я не про это. Я говорю что делать с наследием? С тысячами исходников которые уже написаны так Код: plaintext 1.
и наследуют поведение кота Шрёдингера. Для богов это не имеет значения. Кот Шредингера, как и Чеширский - часть мира. Отражающая факт присутствия в мире неопределенного поведения по вине богов ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 01:42 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 01:42 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 Код: plaintext 1.
Это правда, хороший вопрос. По сути вопрос о том, как правильно писать свой operator= И как он связан с copy-constructor, move и swap. Конечно, хорошо было бы, чтобы в этом месте о вкусе устриц высказались те, кто их ел. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 02:58 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020, Сам не хотел такую архитектуру, да либа заставила. Если ее первой не воткнуть до всего всего кода то не компилируется. Я так понял, что конфликты с заголовками Qt. Чей вперед заголовок тот и побеждает. Не знаю как решить, а так работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 07:40 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Алексей Роза 2020, Сам не хотел такую архитектуру, да либа заставила. Если ее первой не воткнуть до всего всего кода то не компилируется. Я так понял, что конфликты с заголовками Qt. Чей вперед заголовок тот и побеждает. Не знаю как решить, а так работает. Вот похожая проблема с другой либой авторЯ обнаружил, что с OpenCV 3 замена порядка заголовков включает так, чтобы opencv2 / opencv.hpp был включен до того, как какие-либо заголовки Какао также позволяют избежать ошибки компилятора. - MoDJ 31 дек. Была такая же проблема с разными комбинациями заголовков. - JE42 06 июля '16 в 13:45 Использование #undef checkперед включением opencv.hppможет устранить ошибку. Это полезно в смешанной среде Swift / obj-C, где вы не всегда можете перетасовать порядок включения. - acj 24 августа '16 в 14:07 https://stackoverflow.com/questions/31665095/xcode-error-compiling-c-expected-member-name-or-after-declaration-specifie ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 07:57 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby Dima T Мы тут долго обсуждаем почему не ноли, а можно что-то добавить чтобы в своем проекте сделать инициализацию нолями? Просто сделать для себя как хочется, а не как принято. как-то странно сам вопрос выглядит (вроде фигурные скобки уже были в топике). Про скобки и прочие способы явной инициализации понятно. Стек пока тоже оставим в стороне. Зачем? Чтобы меньше косячить тем кто не привык писать на С++, например ТСу, привыкшему в C# что по-умолчанию ноль. Допустим производительность некритична, и просто хочется перегрузить оператор new так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Также прочие виды new по аналогии. Но поможет ли это ему если он использует Qt ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 08:15 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T, А что? Это инициализирует все все поля в классе? И дату и строку и числа и.... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 08:36 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Dima T, А что? Это инициализирует все все поля в классе? И дату и строку и числа и.... Да. Это выделение памяти под объект, т.е. под все его поля. http://www.amse.ru/courses/cpp2/2011_03_21.html Штатно malloc() дает кусок памяти с мусором, замена на calloc() приведет к тому что мусор заменится на нули. Далее там где явно инициализация прописана - проинициализируется согласно прописанному, что не прописано - останется с нулями. Вот только я не уверен что Qt будет вызывать этот перегруженный new. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 08:45 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Тут еще такой момент: если Qt использует свой перегруженный new, то если мы его подменим - он не будет вызываться. Вот еще статья про перегрузку https://habr.com/ru/post/490640/ PS Я перегрузкой не пользуюсь, поэтому только в теории про нее знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 08:57 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T, Имхо для Qt оверхед ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 09:28 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Del ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 09:28 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Имхо для Qt оверхед ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 10:50 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov PetroNotC Sharp Имхо для Qt оверхед Я давно определился. Оверхед обозначает "компромисс МЕЖДУ правильностью и затратами на это". Так как инициализация без new, то определитесь что вы лично предлагаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 11:29 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 ... Хм, а чё это у вас ф-я в глобале, а не в наследуемом классе, м? ... Рискну переформулировать эту идею и изложить её в императивной форме: Нигде не используй классы QT в своем коде напрямую. Создай свои классы-прослойки, со своими, тебе конкретно полезными конструкторами, и в своем коде используй только эти интерфейсы-оболочки, лежащие в собственных файлах. Изолируй зависимости в первую очередь. А уж там наследование окажется или агрегация внутри - дело вторичное по отношению с сплошному растягиванию по коду зависимостей от QT, непрерывных проблем инициализации и порождению проклятия перехода на "новую версию чужой библиотеки". это же очевидное дело - взялся взаимодействовать с чужой библиотекой - сначала отгородись от неё забором. Взаимодействуй с чужой библиотекой только через управляемые тобой окошки и дверки. Тогда то, что происходит позадь забора, не будет тревожить твой собственный огород, кроме, может быть, вопроса о выборе цвета краски для любимого забора. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 12:04 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby mayton, если без смеха, то моему глазу милее инициализация с круглыми скобками - int i3(42); просто потому, что по смыслу письма, эта форма означает вызов параметризованного конструктора. Что в меня гораздо проще въезжает. Вы согласны писать на 1 символ больше? Всегда? И просто из чувства прекрасного? Из осознания того что работает конструктор? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 12:06 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
mayton, :)) обычно я согласен писать то, что сам способен прочитать без затруднений. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 12:10 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby, -1 Qt это не просто либа. Это фреймворк-платформа. Она диктует архитектуру. Как хибер в java или спринг. То есть наоборот. Везде используй QtObject QString а не std::string и т.д. Если буст, то там свои законы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 12:10 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Basil A. Sidorov пропущено... Вы уже определитесь - или вам инициализированные объекты или "оверхед". Я давно определился. Оверхед обозначает "компромисс МЕЖДУ правильностью и затратами на это". Так как инициализация без new, то определитесь что вы лично предлагаете. Походу ты не понял, new происходит в любом случае, я же 22223355 скопипастил код классического new и показал какую строчку надо заменить чтобы нули появились. Я ссылки давал, мог бы почитать http://www.amse.ru/courses/cpp2/2011_03_21.html Переменная объектного типа в динамической памяти создаётся в два этапа: 1. Выделяется память с помощью оператора new. 2. Вызывается конструктор класса. Без п.1 просто негде будет объект создавать, п.2 по мере необходимости, т.е. только то что явно в коде задано. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 12:12 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, как скажешь... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 12:16 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T, Я тоже тебе дал псевдокод myFunction() { ````` } main(.... .... Class A a a.pointerFunc = myFunction; Где перегрузить new и поможет ли это коду выше? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 12:28 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Код: plaintext 1.
Это на стеке создается, без new, тут похоже никак не влезть в выделение памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 13:00 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T PetroNotC Sharp Код: plaintext 1.
Это на стеке создается, без new, тут похоже никак не влезть в выделение памяти. Все я понял. Для моего случая оверхед и риски (что вообще не сработает). Для других каких проектов может и супер. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 13:10 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
А сколько стека у нас есть в дефолтном Windows/Linux процессе? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 13:14 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
mayton А сколько стека у нас есть в дефолтном Windows/Linux процессе? Виндавс 1 Мб, линукс вроде так же. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 13:15 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC SharpОверхед обозначает "компромисс МЕЖДУ правильностью и затратами на это". Какое странное, необычное определение оверхэда. Тебе следует его запатентовать. Никто ещё не додумался употреблять это слово в качестве синонима для "trade-off". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 13:46 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T PS Я перегрузкой не пользуюсь, поэтому только в теории про нее знаю. в ++20 шаблоны, которые заменили перегрузку, заменяются на concept авторStroustrup: overloading is a basis of generic programming. Fundamental to C++ generic programming. Overloading like functions, but much simpler. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 15:15 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
booby Алексей Роза 2020 ... Хм, а чё это у вас ф-я в глобале, а не в наследуемом классе, м? ... Рискну переформулировать эту идею и изложить её в императивной форме: Нигде не используй классы QT в своем коде напрямую. Создай свои классы-прослойки, со своими, тебе конкретно полезными конструкторами, и в своем коде используй только эти интерфейсы-оболочки, лежащие в собственных файлах. Изолируй зависимости в первую очередь. А уж там наследование окажется или агрегация внутри - дело вторичное по отношению с сплошному растягиванию по коду зависимостей от QT, непрерывных проблем инициализации и порождению проклятия перехода на "новую версию чужой библиотеки". это же очевидное дело - взялся взаимодействовать с чужой библиотекой - сначала отгородись от неё забором. Взаимодействуй с чужой библиотекой только через управляемые тобой окошки и дверки. Тогда то, что происходит позадь забора, не будет тревожить твой собственный огород, кроме, может быть, вопроса о выборе цвета краски для любимого забора. да от QT вообще подальше надо держаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 15:17 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov PetroNotC SharpОверхед обозначает "компромисс МЕЖДУ правильностью и затратами на это". Какое странное, необычное определение оверхэда. Тебе следует его запатентовать. Никто ещё не додумался употреблять это слово в качестве синонима для "trade-off"."критикуя предлагай!" (с) сам знаешь кто это сказал)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 15:24 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 да от QT вообще подальше надо держаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 15:25 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp"критикуя предлагай!" Предлагаю почитать словарь чтобы быть в курсе значения терминов, которые пытаешься использовать: https://en.wikipedia.org/wiki/Overhead_(computing) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 15:34 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dima T mayton А сколько стека у нас есть в дефолтном Windows/Linux процессе? Виндавс 1 Мб, линукс вроде так же. Почитал. В Линуксе вроде 8 Мб. Конфигурируется в /etc/profiles для пользователей через Код: plaintext 1.
Из рекомендаций. Подбирают под тип использования операционки и исходя из максимального количества работающих threads. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 15:42 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov PetroNotC Sharp"критикуя предлагай!" Предлагаю почитать словарь чтобы быть в курсе значения терминов, которые пытаешься использовать: https://en.wikipedia.org/wiki/Overhead_(computing) то есть ты зубрить умеешь, а своими словами нет? Бывает, человек читает и сути не понимает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 15:45 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
PetroNotC Sharpто есть ты зубрить умеешь, а своими словами нет? Со "своими словами" опять же есть риск, что твоё собственное понимание термина расходится с действительным. PetroNotC SharpБывает, человек читает и сути не понимает. Ок, в таком случае упрощённая версия: оверхэд это что-то, совершенно ненужное для выполнения основной задачи. От него все пытаются избавиться и терпят только если не получилось или цена такого избавления слишком высока. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 15:51 |
|
Как правильно вызвать указатель на функцию с парам строкой?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Со "своими словами" опять же есть риск, что твоё собственное понимание термина расходится с действительным. А так, твоё слово фи против моего фи. Dimitry Sibiryakov Ок, в таком случае упрощённая версия: оверхэд это что-то, совершенно ненужное для выполнения основной задачи. -1 совершенно ненужное это не оверхед))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 16:03 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017312]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
90ms |
get tp. blocked users: |
1ms |
others: | 299ms |
total: | 459ms |
0 / 0 |