как происходит вызов функции в с++?
моё представление таково(наверняка не правильно): тело функции копируется в кучу (стек?), идентификатору присваивается адрес(смещение от начала кода?), при вызове происходит переход по данному адресу, работает тело функции, происходит возврат...
вопросы: где находится стек, когда он выделяется? как передаются параметры функции, возвращаемое значение? что происходит с методами классов? почему работают методы типа
Class::Destroy(void)
{
delete this;
}
или поделитесь ссылкой на толковую статью..
очень хочется разобраться
спасибо заранее.
пс. гуглил, но ничего толкового не нашёл.
Цитата: JihN
как передаются параметры функции, возвращаемое значение?
Если пишите в Builder'е, там есть одно хорошее окно при отладке View->Debug Windows->CPU. В свое время изучал вызов функций именно по этому окну. В MSVC2005 Debug->Windows->....
Насчет vtable, почитайте Страуструпа или Дейтеля.
ИМХО это очень мутное харакири, которое непонятно как завершается. Не понятно, куда возвращается управление, после вызова delete this.
Цитата: Gigahard
Уже в свое время спрашивал на этом форуме, чем чревато delete this.
ИМХО это очень мутное харакири, которое непонятно как завершается. Не понятно, куда возвращается управление, после вызова delete this.
ИМХО это очень мутное харакири, которое непонятно как завершается. Не понятно, куда возвращается управление, после вызова delete this.
Довольно мутное, но все зависит от того, где происходит вызов. Если после этого вызова к объекту гарантировано никто обращаться не будет, то при большом желании и большой осторожности - это может работать вполне корректно.
А управление возвращается по адресу возврата, записанному в стеке.