|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » возврат класса из функции в С++ |
|
возврат класса из функции в С++
|
![]() Ветеран Сообщения: 1180 |
Я не нашёл в литературе, но посмотрев, что делает компилятор, пришёл к выводу. Меня интересует на сколько он верен.
struct A { int member1; int member2; int member3; A() {} A(int i) : member1(i), member2(i), member3(i) {} } class B { public: const A func1() { return A(10); } const A func2() { A a; a.member1 = 10; return a; } ... void test() { B b; int i; // 1) i = b.func1().member1; i = b.func2().member1; // 2) A a1(func1()); A a2(func2()); } 1. Создаётся экземпляр класса и из него берётся поле. 2. В первом случае выделяется память из стека test() и в ней строится объект. Во втором - строится объект в func2(), затем копируется в такой же в test(), удаляется в func2(), ну и там дальше работает. Таким образом, если бы у объекта A был (нетривиальный) деструктор, он вызвался бы два раза (из func2 и test). Вопрос такой: верно ли, что если функция возвращает объект, который строится в прямо в return, то создаётся только один экземпляр класса? (есть подозрение, что это оставлено на усмотрение компилятора) |
|
Отправлено: 14:40, 02-07-2004 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Да, это разрешённая оптимищация. В su.c_cpp обсуждалось сиё много раз, в архивах, наверно и подробности найти можно.
|
------- Отправлено: 15:31, 02-07-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Загрузка - Возврат к заводским установкам. | 150473 | Microsoft Windows Vista | 2 | 30-07-2009 16:21 | |
Разное - Возврат XP Home OEM | kracken | Лицензирование продуктов Microsoft | 6 | 04-06-2009 13:55 | |
Разное - Возврат ПО | djeff | Лицензирование продуктов Microsoft | 6 | 17-04-2009 11:37 | |
[решено] Возврат DC в домен | Jekael | Microsoft Windows NT/2000/2003 | 10 | 26-11-2007 10:34 | |
Возврат к предыдущей версии | Birdy | Хочу все знать | 10 | 24-05-2005 06:35 |
|