Просветите про g++

vukula



class xxx
{
public:
xxx
{
............;
};
~xxx
{
............;
};
xxx (const xxx&)
{
............;
};
};
xxx func
{
xxx temp;
........
[b]return temp;[/b]
}


Что происходит, когда вызывается return temp?
Вроде бы сначала должен вызваться конструктор копирования, а затем деструктор для temp, но gdb ничего такого не показывает.

mirt1971

Скорее всего это превращается в ничего... После инлайна не остается ничего...

vukula

Это ты к тому, что у меня все конструкторы - деструкторы пустые? Так это я такаписал, чтобы не писать, что они делают, а просто обозначить, что они перегружены.
На самом деле в реальном классе все они были не тривиальными.

Dasar

В идеале, должен вызваться только конструктор xxx.
На практике, так же могут быть вызваны: конструктор копии и деструктор.

stat6535144

Не забывайте, что существует еще один копирующий метод каждого объекта - оператор "=".
Таким образом могут быть следующие варианты:
1) xxx // в стеке вызываемого метода
operator =(temp)
temp.~xxx
2) xxx(temp)
temp.~xxx

vukula

Спросил у Богачёва.
Оказалось, что конструктор копирования + деструктор.
Ещё он сказал, что всё может быть, т. к. класс - сложная штука.
Больше он ничего не ответил, так как его начали доставать первокурсники.
Видимо, компилятор читит.

rosali

Недавно было уже это.
Оставить комментарий
Имя или ник:
Комментарий: