powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно вызвать указатель на функцию с парам строкой?
90 сообщений из 90, показаны все 4 страниц
Как правильно вызвать указатель на функцию с парам строкой?
    #40013034
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что то не выходит, валится приложение.
И std::string пробовал и char, char *, char[])))))
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013035
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ничего не помогает, вызывайте так, как описано в заголовке/документации.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013044
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Указатель как объявлен?

Если это экспортируемая из DLL функция, то как-то так
Код: plaintext
1.
2.
3.
4.
5.
6.
typedef int (WINAPI *DECODE) (const char*);
...

DECODE fn_decode = ...;
char* str = ...;
fn_decode(str);
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013050
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Спасибо.
Оказалось банальность в высшей степени.
Не успел присваивать в класс поле адрес функции.
В результате там null или мусор....
И главное отладчик пишет
SIGSEGV от операционки.
Ну я и не догадался что там пусто.
....
Работает простой std::string.
Везде его стараюсь.
...
Счас попробую на if nulll проверки добавить.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013055
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно студия показывает более вменяемое сообщение на данный юзкейс чем Qt Creator.
Imho
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013064
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpИ главное отладчик пишет
SIGSEGV от операционки.

Так собирать надо с отладочной информацией. Тогда он и место покажет, и call stack.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013072
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Думаю тут автоматом это режим. Как и в студии.
Кнопа - отладка.
Бряк на вызове функции возле main() из класс поставил.
При входе в метод падение.
Я заметил что в плюсах надо руками инициализировать поля указатели.
If (p) не работает из коробки.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013076
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Адрес при ошибке (мусор) - 0х56
Адрес после
pointerMy = nullptr;
0x0
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013077
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Я заметил что в плюсах надо руками инициализировать поля указатели.
If (p) не работает из коробки.

Любые указатели надо инициализировать нулем или конкретным значением. Это не C# где автоматом нули по умолчанию.
В С/С++ просто выделяется память под хранение указателя, а значением становится тот мусор, который остался с прошлого использования этой памяти.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013082
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЛюбые указатели надо инициализировать нулем или конкретным значением.

Я даже больше скажу: переменные любого типа надо инициализировать. Причём компилятор имеет
привычку предупреждать об использовании неинициализированных переменных, но кто ж эти
"многа букафф" читает?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013083
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
PetroNotC Sharp
Я заметил что в плюсах надо руками инициализировать поля указатели.
If (p) не работает из коробки.

Любые указатели надо инициализировать нулем или конкретным значением. Это не C# где автоматом нули по умолчанию.
В С/С++ просто выделяется память под хранение указателя, а значением становится тот мусор, который остался с прошлого использования этой памяти.

Да.
Добавил
Код: plaintext
1.
2.
public:
   void (*p) (std::string) = nullptr;


А жаль.
Чем продиктовано что не как в шарпе?
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013084
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpЧем продиктовано что не как в шарпе?

Шарп появился как "С++ для дебилов", а не наоборот.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013086
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
PetroNotC SharpЧем продиктовано что не как в шарпе?

Шарп появился как "С++ для дебилов", а не наоборот.))))))
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013087
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Чем продиктовано что не как в шарпе?

Производительностью. Запись нулей - не всегда нужная операция, но процессорное время на нее надо будет тратить всегда.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013090
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Ну, время наверно сопоставимо с инициализацией всего класса?
Я чисто про класс говорю.
Тем кому время критично наверно без классов работают.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013093
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpНу, время наверно сопоставимо с инициализацией всего класса?

Ты не поверишь, но у классов тоже нет инициализации кроме явной в конструкторах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013094
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Dima T,
Ну, время наверно сопоставимо с инициализацией всего класса?
Я чисто про класс говорю.
Тем кому время критично наверно без классов работают.

Инициализация объекта - это присвоение явно прописанных значений полям, запуск конструкторов полей и выполнение конструктора класса. Если ничего перечисленного нет, то на инициализацию класса не тратится ни одного процессорного такта.

Вобщем если что-то явно не прописали - С/С++ считает это лишним.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013095
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
PetroNotC Sharp
Чем продиктовано что не как в шарпе?

Производительностью. Запись нулей - не всегда нужная операция, но процессорное время на нее надо будет тратить всегда.


строго говоря да, "производительностью".

Но у идеи такого поведения есть полезный побочный эффект,
который в "других местах" может проявляться ленивым выделением памяти, например.

смысл происходящего заключается в создании объекта в частично сформированном состоянии .
Там где заполняют нулями принудительно, считают, что нам таких объектов не нать.
Там, где не заполняют - считают, что это правомерное состояние, а полное состояние сформируется позднее.
В этом смысле, чтение до записи, в языках сорта C, является обыкновенной ошибкой програмиста.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013109
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
Вы намекаете на анализ сего факта что если там мусор значит объект еще не родиля и на 6м месяце?
А как вы проверите что там мусор и объект не полностью готов?
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013119
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
booby,
Вы намекаете на анализ сего факта что если там мусор значит объект еще не родиля и на 6м месяце?
А как вы проверите что там мусор и объект не полностью готов?

хоть на 36-м.

Зачем нужен объект, и когда должен оказаться полностью сформированным - дело его создателя .

Проверять ничего не надо .

За готовность объекта к использованию на момент его фактического использования,
когда состояние должно оказаться полностью сформированным, никто, кроме создателя, ответственности не несет.
Это просто - хочешь "значения по умолчанию" - просто присвой его, имени себя, как создателя, конкретное умолчание,
путем совмещенния объявления подходящей по типу переменной с конструированием любимого, или потребного в конкретном месте, "умолчания".

у тебя эта парадигма, в этом языке от зубов на кончиках пальцев, без включения мозга, на полном автомате должна работать.

Как правильные движения лыжного гонщика, велосипедиста или пловца.
Однажды усвоенные движения невозможно вытеснить.
При наступлении усталости новый навык "устаёт", и просыпается первоначальный.
Если ты на шарпах первый навык получал, и "немного устал сегодня", то пальцы твои автоматически начнут рассчитывать на дефолтные привоения.

Просто надо отдохнуть.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013123
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
А я думал что за полезный побочный эффект)))))
Короче, не расслабляйся)
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013124
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

а что думаешь, легко было осваивать коньковый ход в лыжах тем, кто всю жизнь бегал классикой...
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013132
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
Ну, инициализацию фигурными скобками же добавили)
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013144
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
booby,
Ну, инициализацию фигурными скобками же добавили)


это же ничего не меняет по смыслу.
ты как был бог, так им и остаёшься.
Что напишешь в эти скобки, так мир и окажется устроен.

В своих структурах/классах ты можешь рулить конструкторами по умолчанию, представляя себе разумное поведение,
формируя его полностью, или сознательно оставляя часть структуры, а значит - сам объект, в неполностью сформированном состоянии.
В последнем случае - ты либо кодом для "как проверять" это дело снабжаешь, или/и конструкторами,
позволяющими получить полностью сформированный объект.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013149
Dimitry Sibiryakov
Я даже больше скажу: переменные любого типа надо инициализировать. Причём компилятор имеет привычку предупреждать об использовании неинициализированных переменных, но кто ж эти "многа букафф" читает?..

в C++ же конструкторы этим занимаются, которых не было в C.
И они же гарантируют, что не будет мусора.
Классы в C++ сделаны для увеличения автоматизма и уменьшения ошибок.
А вот так зачем в C++ писать непонятно:
PetroNotC Sharp
Код: plaintext
1.
2.
public:
   void (*p) (std::string) = nullptr;


это же "naked pointer", который "НЕЛЬЗЯ"
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013151
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020в C++ же конструкторы этим занимаются, которых не было в C.
И они же гарантируют, что не будет мусора.

Занимаются если они написаны. Гарантируют они ровно то, что в них написано.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013152
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
А как вы проверите что там мусор и объект не полностью готов?

Никак, это заранее надо предусмотреть разработчику класса. ООП гласит что объект сразу должен быть инициализирован, но если разработчик решает что некоторые поля могут быть инициализированы мусором, то почему нет?

Вот так сложилось в С++ что по умолчанию это инициализация мусором и менять это в стандарте вряд ли кто захочет.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013158
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
... ООП гласит что объект сразу должен быть инициализирован...

вообще говоря, ничего близко подобного "ООП" гласить не может .
И особенно, с учетом того, что понятие "состояние" в ООП относится, главным образом , к скрытой,
снаружи не видимой части состояния объекта там, где это "про ООП".

Но нечто подобное, действительно, гласят, некоторые интертрепаторы ООП и изобретатели "самых безопасных в мире языков".

Dima T

Вот так сложилось в С++ что по умолчанию это инициализация мусором и менять это в стандарте вряд ли кто захочет.

Думаю, что это исключено.
По крайней мере, при жизни Страуструпа.
Он, конечно, раб комитета, но не настолько, чтобы не суметь ему противостоять в принципиальных вопросах.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013173
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
это же "naked pointer", который "НЕЛЬЗЯ"
не понял что это нельзя? Работает ведь.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013174
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
Мы выше выяснили, что полуобъект никакого смысла не имеет кроме скорости.
Что не подтверждено кодом профи).
Ну и в бизнес объектах добавляют флаг или перечислимое о том что он "сформирован"
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013181
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
...
Ну и в бизнес объектах добавляют флаг или перечислимое о том что он "сформирован"

это просто чепуха.
"добавляют", но почти всегда не от большого ума.

PetroNotC Sharp
booby,
Мы выше выяснили, что полуобъект никакого смысла не имеет кроме скорости.
...

Похоже, вы не вполне поняли о чем идет речь.
Забудьте про скорость.

Те, кто считает, что вопрос только в скорости, автоматически влепляют в систему типов дефолтную инициализацию до полного состояния.
Но, оказывается, в содержательных случаях, это левое движение, которое ни к чему не приближает.
Здесь за вас просто не делают левого движения.
Попробуйте испытать гордость.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013185
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 как бэ намекают, что таки есть некие правила .
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013186
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
ОК, про скорость забыл.
Главное не забыть инициализировать).
Тут ведь третичная логика)). Да/нет/мусор
))
Уже второй раз натыкаюсь на грабли.
И IDE тоже нифига не помогает....в 21 веке.
Повешу красный плакат перед носом))
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013188
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Алексей Роза 2020
это же "naked pointer", который "НЕЛЬЗЯ"
не понял что это нельзя? Работает ведь.

Скажем так: не рекомендуется использовать. Можно потому что указатель под капотом тех же умных указателей и прочих классов STL.
Указатели даже для С++ это рудимент унаследованный из С, в С++ изначально ввели ссылки чтобы хоть как-то проблемы с указателями сгладить, но указатели оставили.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013189
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
...
Тут ведь третичная логика)). Да/нет/мусор
...

Здесь вы совершаете критическую ошибку.

языкам программирования трехзначная логика и неприменение закона исключения третьего запрещены
правительством США (это шутка, но с не сильно ошибочным содержанием).

Нет никакого Да/нет/мусор

Есть Да/нет/[неопределенное поведение], иначе см. на закон исключения третьего в п.1.
Задача "безопасных" языков свести это к Да/нет.

Вот и вся история.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013190
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
И IDE тоже нифига не помогает....в 21 веке.
Повешу красный плакат перед носом))

Помогает, но ненавязчиво
Dimitry Sibiryakov

Причём компилятор имеет привычку предупреждать об использовании неинициализированных переменных, но кто ж эти "многа букафф" читает?..
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013191
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мусор, не мусор - вот почему у меня время редактирования сообщения меньше времени его создания.
Вот это настоящий вопрос/
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013192
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020,
А если у меня указатель просто переход на функцию глобальную в модуле main?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
myFunction() {
`````
} 

main(....
.... 
Class A a
a.pointerFunc = myFunction;


Никакие addref, release делать не нужно.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013193
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
мусор, не мусор - вот почему у меня время редактирования сообщения меньше времени его создания.
Вот это настоящий вопрос/

Багофича sql.ru, ты не первый заметил 22208645
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013197
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПомогает, но ненавязчиво

Поэтому лично я связкой "-Wall -Wextra -Werror" превращаю это в "навязчиво". И со времени,
когда я начал так делать, количество багрепов резко уменьшилось.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013202
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Мы не путаем варнинг Переменная не используется в коде и просто нарушена очередность вызова. Вызвано до инициализации.
Завтра проверю что она там мяукает.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013205
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя да, неинициализированные поля объектов оно не обнаруживает, к сожалению. Только
локальные переменные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013207
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Да. И это жаль.
В методах оно задолбало так как всегда прототип пишешь, и только после цепляешь все параметры в бизнес логику кода.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013208
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы тут долго обсуждаем почему не ноли, а можно что-то добавить чтобы в своем проекте сделать инициализацию нолями? Просто сделать для себя как хочется, а не как принято.

Глобально оператор new можно перегрузить и там прописать, а как быть с тем что на стэке размещается, типа
Код: plaintext
1.
2.
3.
main(....
.... 
Class A a;
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013209
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как тут говорят - класс(структура) это святое! Не трожь и не посыпай никаким синтаксическим сахаром! (с) Страуструп.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013211
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Я в Qt пишу. И там new практически не используется.
Достаточно редко.
Вот такие пироги.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013217
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Да давно уже пора сделать. А кто хочет перформанса дать опции наподобие DEBUG, пускай он эту механику выключит там где ему сильно нужно.

Но я сомневаюсь что в мире ООП кто-то сильно оптимизирует создание объектов.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013227
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Dima T,
Я в Qt пишу. И там new практически не используется.
Достаточно редко.
Вот такие пироги.

Да, new это тоже опасный оператор, утечки памяти будут если накосячишь, поэтому используются обертки.
Может ошибаюсь, с Qt незнаком, но без new в куче объект не разместить, а с объектами на стэке тоже далеко не уедешь. Подозреваю что new там есть глубоко закопанное, другой вопрос можно ли туда докопать.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013236
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее здесь стек играет роль презерватива.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013294
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Мы тут долго обсуждаем почему не ноли, а можно что-то добавить чтобы в своем проекте сделать инициализацию нолями? Просто сделать для себя как хочется, а не как принято.

Глобально оператор new можно перегрузить и там прописать, а как быть с тем что на стэке размещается, типа
Код: plaintext
1.
2.
3.
main(....
.... 
Class A a;


как-то странно сам вопрос выглядит (вроде фигурные скобки уже были в топике).

вообще-то это "инициализацией" называют.
Вот рассказ как раз для фигурных скобок, например:
https://habr.com/ru/post/436296/

А вообще, если именно "на стеке" хочется, то вроде как в C++ больше принято для такого хотения дело со Struct иметь, не?

вот тут еще много букв с мультфильмами и перечислением 18 валидных способов инициализации целого
(из которых первый - как раз не полностью сформированный объект).
https://habr.com/ru/company/jugru/blog/469465/
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013296
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот хорошее дефолтное поведение для компиллятора.

Код: plaintext
1.
int i = {};



Для всех диких переменных сделали бы так. Убудет штоли? Или лишние такты процессора жалко?
Что там этот лысый дядечка? Держится за старое? Компатибилити?
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013302
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

а почему тебя ломает написать это своими ручками?
Без этого слово "вечность" не соберется, так и поедешь к Герде цветы поливать.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013305
PetroNotC Sharp
Алексей Роза 2020,
А если у меня указатель просто переход на функцию глобальную в модуле main?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
myFunction() {
`````
} 

main(....
.... 
Class A a
a.pointerFunc = myFunction;



Никакие addref, release делать не нужно.

Хм, а чё это у вас ф-я в глобале, а не в наследуемом классе, м?
Тогда бы и указатель не нужен был.
Надо просто за правило взять, что указатели в C++ - это плохо.
вот, тоже правильно пишет:
Dima T
Скажем так: не рекомендуется использовать. Можно потому что указатель под капотом тех же умных указателей и прочих классов STL.
Указатели даже для С++ это рудимент унаследованный из С, в С++ изначально ввели ссылки чтобы хоть как-то проблемы с указателями сгладить, но указатели оставили.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013306
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не про это. Я говорю что делать с наследием? С тысячами исходников которые уже написаны
так

Код: plaintext
1.
int i;



и наследуют поведение кота Шрёдингера.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013307
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
если без смеха, то моему глазу милее инициализация с круглыми скобками - int i3(42);
просто потому, что по смыслу письма, эта форма означает вызов параметризованного конструктора.
Что в меня гораздо проще въезжает.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013308
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я не про это. Я говорю что делать с наследием? С тысячами исходников которые уже написаны
так

Код: plaintext
1.
int i;



и наследуют поведение кота Шрёдингера.

Для богов это не имеет значения.
Кот Шредингера, как и Чеширский - часть мира.
Отражающая факт присутствия в мире неопределенного поведения по вине богов
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013309
Код: plaintext
1.
int i3 = 43; // уже совершенно НЕпонятно, чё тут происходит
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013318
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
Код: plaintext
1.
int i3 = 43; // уже совершенно НЕпонятно, чё тут происходит


Это правда, хороший вопрос.
По сути вопрос о том, как правильно писать свой operator=
И как он связан с copy-constructor, move и swap.

Конечно, хорошо было бы, чтобы в этом месте о вкусе устриц высказались те, кто их ел.
:)
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013325
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020,
Сам не хотел такую архитектуру, да либа заставила.
Если ее первой не воткнуть до всего всего кода то не компилируется.
Я так понял, что конфликты с заголовками Qt.
Чей вперед заголовок тот и побеждает.
Не знаю как решить, а так работает.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013327
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013331
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Dima T
Мы тут долго обсуждаем почему не ноли, а можно что-то добавить чтобы в своем проекте сделать инициализацию нолями? Просто сделать для себя как хочется, а не как принято.

как-то странно сам вопрос выглядит (вроде фигурные скобки уже были в топике).

Про скобки и прочие способы явной инициализации понятно. Стек пока тоже оставим в стороне.

Зачем? Чтобы меньше косячить тем кто не привык писать на С++, например ТСу, привыкшему в C# что по-умолчанию ноль.

Допустим производительность некритична, и просто хочется перегрузить оператор new так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void *operator new(size_t size) {
    //void *p = malloc(size);
    void *p = calloc(size, 1);
    if (p == NULL) {
        throw std::bad_alloc();
    }
    return p;
}


Также прочие виды new по аналогии.

Но поможет ли это ему если он использует Qt ?
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013333
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
А что? Это инициализирует все все поля в классе?
И дату и строку и числа и....
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013334
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Dima T,
А что? Это инициализирует все все поля в классе?
И дату и строку и числа и....

Да. Это выделение памяти под объект, т.е. под все его поля. http://www.amse.ru/courses/cpp2/2011_03_21.html
Штатно malloc() дает кусок памяти с мусором, замена на calloc() приведет к тому что мусор заменится на нули.
Далее там где явно инициализация прописана - проинициализируется согласно прописанному, что не прописано - останется с нулями.

Вот только я не уверен что Qt будет вызывать этот перегруженный new.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013339
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут еще такой момент: если Qt использует свой перегруженный new, то если мы его подменим - он не будет вызываться.
Вот еще статья про перегрузку https://habr.com/ru/post/490640/

PS Я перегрузкой не пользуюсь, поэтому только в теории про нее знаю.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013345
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Имхо для Qt оверхед
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013346
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Del
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013367
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Имхо для Qt оверхед
Вы уже определитесь - или вам инициализированные объекты или "оверхед".
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013382
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
PetroNotC Sharp
Имхо для Qt оверхед
Вы уже определитесь - или вам инициализированные объекты или "оверхед".

Я давно определился.
Оверхед обозначает "компромисс МЕЖДУ правильностью и затратами на это".
Так как инициализация без new, то определитесь что вы лично предлагаете.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013391
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
...
Хм, а чё это у вас ф-я в глобале, а не в наследуемом классе, м?
...

Рискну переформулировать эту идею и изложить её в императивной форме:

Нигде не используй классы QT в своем коде напрямую.

Создай свои классы-прослойки, со своими, тебе конкретно полезными конструкторами,
и в своем коде используй только эти интерфейсы-оболочки, лежащие в собственных файлах.
Изолируй зависимости в первую очередь.

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

это же очевидное дело - взялся взаимодействовать с чужой библиотекой - сначала отгородись от неё забором.
Взаимодействуй с чужой библиотекой только через управляемые тобой окошки и дверки.
Тогда то, что происходит позадь забора, не будет тревожить твой собственный огород, кроме, может быть,
вопроса о выборе цвета краски для любимого забора.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013392
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
mayton,
если без смеха, то моему глазу милее инициализация с круглыми скобками - int i3(42);
просто потому, что по смыслу письма, эта форма означает вызов параметризованного конструктора.
Что в меня гораздо проще въезжает.


Вы согласны писать на 1 символ больше? Всегда? И просто из чувства прекрасного?
Из осознания того что работает конструктор?
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013393
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

:))
обычно я согласен писать то, что сам способен прочитать без затруднений.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013394
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
-1
Qt это не просто либа. Это фреймворк-платформа. Она диктует архитектуру. Как хибер в java или спринг.
То есть наоборот.
Везде используй QtObject QString а не std::string и т.д.
Если буст, то там свои законы.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013396
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Basil A. Sidorov
пропущено...
Вы уже определитесь - или вам инициализированные объекты или "оверхед".

Я давно определился.
Оверхед обозначает "компромисс МЕЖДУ правильностью и затратами на это".
Так как инициализация без new, то определитесь что вы лично предлагаете.

Походу ты не понял, new происходит в любом случае, я же 22223355 скопипастил код классического new и показал какую строчку надо заменить чтобы нули появились.

Я ссылки давал, мог бы почитать
http://www.amse.ru/courses/cpp2/2011_03_21.html Переменная объектного типа в динамической памяти создаётся в два этапа:
1. Выделяется память с помощью оператора new.
2. Вызывается конструктор класса.

Без п.1 просто негде будет объект создавать, п.2 по мере необходимости, т.е. только то что явно в коде задано.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013397
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

как скажешь...
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013402
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Я тоже тебе дал псевдокод
myFunction() {
`````
}

main(....
....
Class A a
a.pointerFunc = myFunction;

Где перегрузить new и поможет ли это коду выше?
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013412
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Код: plaintext
1.
Class A a


Это на стеке создается, без new, тут похоже никак не влезть в выделение памяти.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013415
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
PetroNotC Sharp
Код: plaintext
1.
Class A a



Это на стеке создается, без new, тут похоже никак не влезть в выделение памяти.
ну, а говоришь что я не понял.
Все я понял.
Для моего случая оверхед и риски (что вообще не сработает).
Для других каких проектов может и супер.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013418
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сколько стека у нас есть в дефолтном Windows/Linux процессе?
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013419
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А сколько стека у нас есть в дефолтном Windows/Linux процессе?

Виндавс 1 Мб, линукс вроде так же.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013427
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpОверхед обозначает "компромисс МЕЖДУ правильностью и затратами на это".

Какое странное, необычное определение оверхэда. Тебе следует его запатентовать. Никто ещё
не додумался употреблять это слово в качестве синонима для "trade-off".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013468
Dima T
PS Я перегрузкой не пользуюсь, поэтому только в теории про нее знаю.

в ++20 шаблоны, которые заменили перегрузку, заменяются на concept
авторStroustrup: overloading is a basis of generic programming. Fundamental to C++ generic programming.
Overloading like functions, but much simpler.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013470
booby
Алексей Роза 2020
...
Хм, а чё это у вас ф-я в глобале, а не в наследуемом классе, м?
...

Рискну переформулировать эту идею и изложить её в императивной форме:

Нигде не используй классы QT в своем коде напрямую.

Создай свои классы-прослойки, со своими, тебе конкретно полезными конструкторами,
и в своем коде используй только эти интерфейсы-оболочки, лежащие в собственных файлах.
Изолируй зависимости в первую очередь.

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

это же очевидное дело - взялся взаимодействовать с чужой библиотекой - сначала отгородись от неё забором.
Взаимодействуй с чужой библиотекой только через управляемые тобой окошки и дверки.
Тогда то, что происходит позадь забора, не будет тревожить твой собственный огород, кроме, может быть,
вопроса о выборе цвета краски для любимого забора.

да от QT вообще подальше надо держаться.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013478
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
PetroNotC SharpОверхед обозначает "компромисс МЕЖДУ правильностью и затратами на это".

Какое странное, необычное определение оверхэда. Тебе следует его запатентовать. Никто ещё
не додумался употреблять это слово в качестве синонима для "trade-off"."критикуя предлагай!" (с) сам знаешь кто это сказал))))
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013480
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
да от QT вообще подальше надо держаться.
ты смайлик забыл
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013483
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp"критикуя предлагай!"

Предлагаю почитать словарь чтобы быть в курсе значения терминов, которые пытаешься
использовать:
https://en.wikipedia.org/wiki/Overhead_(computing)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013488
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
А сколько стека у нас есть в дефолтном Windows/Linux процессе?

Виндавс 1 Мб, линукс вроде так же.

Почитал. В Линуксе вроде 8 Мб. Конфигурируется в /etc/profiles для пользователей
через

Код: plaintext
1.
$ ulimit -s ...



Из рекомендаций. Подбирают под тип использования операционки и исходя из максимального
количества работающих threads.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013490
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
PetroNotC Sharp"критикуя предлагай!"

Предлагаю почитать словарь чтобы быть в курсе значения терминов, которые пытаешься
использовать:
https://en.wikipedia.org/wiki/Overhead_(computing) то есть ты зубрить умеешь, а своими словами нет?
Бывает, человек читает и сути не понимает.
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013492
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharpто есть ты зубрить умеешь, а своими словами нет?

Со "своими словами" опять же есть риск, что твоё собственное понимание термина расходится
с действительным.

PetroNotC SharpБывает, человек читает и сути не понимает.

Ок, в таком случае упрощённая версия: оверхэд это что-то, совершенно ненужное для
выполнения основной задачи.

От него все пытаются избавиться и терпят только если не получилось или цена такого
избавления слишком высока.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013500
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Со "своими словами" опять же есть риск, что твоё собственное понимание термина расходится
с действительным.
ну дак для этого форум и есть. Чтобы уточнять, опровергать, аргументировать, мыслить.
А так, твоё слово фи против моего фи.

Dimitry Sibiryakov
Ок, в таком случае упрощённая версия: оверхэд это что-то, совершенно ненужное для
выполнения основной задачи.

-1 совершенно ненужное это не оверхед)))
...
Рейтинг: 0 / 0
Как правильно вызвать указатель на функцию с парам строкой?
    #40013501
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
основной задачи.
не основной, а единственной. Не вводи доп задачи как новые сущности.
...
Рейтинг: 0 / 0
90 сообщений из 90, показаны все 4 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно вызвать указатель на функцию с парам строкой?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]