![]() |
Я не нашёл в литературе, но посмотрев, что делает компилятор, пришёл к выводу. Меня интересует на сколько он верен.
Код:
struct A { 1. Создаётся экземпляр класса и из него берётся поле. 2. В первом случае выделяется память из стека test() и в ней строится объект. Во втором - строится объект в func2(), затем копируется в такой же в test(), удаляется в func2(), ну и там дальше работает. Таким образом, если бы у объекта A был (нетривиальный) деструктор, он вызвался бы два раза (из func2 и test). Вопрос такой: верно ли, что если функция возвращает объект, который строится в прямо в return, то создаётся только один экземпляр класса? (есть подозрение, что это оставлено на усмотрение компилятора) |
Да, это разрешённая оптимищация. В su.c_cpp обсуждалось сиё много раз, в архивах, наверно и подробности найти можно.
|
Время: 21:46. |
Время: 21:46.
© OSzone.net 2001-