Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » возврат класса из функции в С++

Ответить
Настройки темы
возврат класса из функции в С++
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Я не нашёл в литературе, но посмотрев, что делает компилятор, пришёл к выводу. Меня интересует на сколько он верен.
Код: Выделить весь код
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
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Да, это разрешённая оптимищация. В su.c_cpp обсуждалось сиё много раз, в архивах, наверно и подробности найти можно.

-------
http://ivank.ru


Отправлено: 15:31, 02-07-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » возврат класса из функции в С++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Загрузка - Возврат к заводским установкам. 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




 
Переход