char *pCode = new char [SIZE]; // Создаём область памяти
Загружаем_Из_Файла (Имя_Файла, pCode); // Загружаем файл с двоичным кодом
TFunction pFunction = (TFunction) pCode; // Приводим указатель
TResult Result = pFunction (Params); // Вызываем функцию
delete[] pCode; // Удаляем область памяти с кодом через указатель на char
delete и указатель на функцию
В чем специфика применения операции delete к указателям на функции?
до сих пор не могу найти ответа. Может кто подскажет?
Может речь об виртуальных деструкторах?
Соответственно, оператор delete к указателям на функции вообще неприменим. Насколько я понимаю.
Переопределение стандартного оператора для определённого класса может реализовать какой-нибудь особенный процесс удаления объектов этого класса.
А функции находятся в области кода, и попытка записать туда что-либо неизбежно закончится ошибкой доступа.
Как исключение, теоретически возможно следующее.
Код:
Но в современных процессорах может (и должна) сработать защита от вирусов - блок, запрещающий передавать управление в области памяти, отличные от сегментов кода.
Цитата: cheburator
Функция - это код, и он не уничтожается.
Соответственно, оператор delete к указателям на функции вообще неприменим. Насколько я понимаю.
Соответственно, оператор delete к указателям на функции вообще неприменим. Насколько я понимаю.
Я бы не относился буквально к слова LAmerMFC, иначе его слова выглядят как бред;) (имхо)Опять таки подчеркиваю, что речь возможно идет о виртуальных деструкторах, те перегрузки деструктора в потомках базового класса. Тут вам и delete, тут вам и указатели на ф-ции.
Цитата: WidowMaker
Я бы не относился буквально к слова LAmerMFC, иначе его слова выглядят как бред;)
Ну почему же сразу бред (какой невоспитанный). Вот вопросы: http://rsdn.ru/Forum/message/140030.1.aspx
а где-то ближе к концу и "бредовый". На все ответил кроме этого.
[quote=RSDN Dima2]
Надо полагать, что это вопрос из серии — "расшатать чуткую нервную систему собеседуемого". Раз есть указатель значит его можно delete
[/quote]
На самом деле, думаю, ответ прост: функция не является объектом, сл-но delete к указателю на неё не применим.
Цитата: Green
На самом деле, думаю, ответ прост: функция не является объектом, сл-но delete к указателю на неё не применим.
Спасибо.