Страницы

Поиск по вопросам

вторник, 31 марта 2020 г.

Почему исключение можно принимать по ссылке

#cpp


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


Ответы

Ответ 1



При выбрасывании исключения оно копируется в специальную область памяти для хранения исключений (или, по возможности, сразу создается в этой области). Поэтому перехватывая исключение по ссылке вы получаете ссылку на этот объект, а не на некоторый объект, который раньше был на стеке. При этом перехватывание исключения по ссылки является предпочтительным в плане производительности по сравнению с перехватыванием по значению, так как в этом случае не происходит копирования.

Ответ 2



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

Комментариев нет:

Отправить комментарий