Re: Глупый вопрос по operator+
От: alexanderfedin США http://alexander-fedin.pixels.com/
Дата: 20.10.03 06:56
Оценка:
Написано абсолютно правильно и будет работать.
В зависимости от компилятора C++ (точнее — оптимиздера кода переменная 's' будет либо сконструирована сразу же на области стека, отведенной для возвращаемого значения, либо при возврате будет вызван конструктор копирования.
Чтобы запутать Вас окончательно, задам вопрос: что происходит при возбуждении исключенияи каким образом объект исключения распространяется выше по стеку?
class Exception {...};

class MyException : public Exception {};

void myFunc()
{
throw MyException(...);//генерируем исключение
//здесь сгенерированный объект исключения уничтожается, но перед смертью он копируется в вызывающий стековый фрейм с помощью конструктора копирования
}

void main()
{
try
{
myFunc();
//здесь мы имеем уже не оригинальный объект исключения, а его копию
}
catch (MyException &e)
{
printf("MyException\n");
}
}
Кстати, если попытаться поймать не 'Exception &e' (ссылка), а 'Exception e' (значение), то информация о типе исключения (MyException) будет безвозвратно потеряна и при вызове 'throw;' далее по стеку будет распространяться только 'Exception'. По крайней мере, это происходит в известных мне компиляторах.

Respectfully,
Alexander Fedin (alexanderfedin@iname.com)
"INsideR" <forum@rsdn.ru> wrote in message news:414389@news.rsdn.ru...
From: INsideR

Есть класс:
class A{
public:
int k;

A(int v)
{
k = v;
}
A(B &b)
{
printf("Yes %d", &b);
}
void pr()
{
printf("Yes");
}
virtual ~A()
{
printf("\nDestr A %d", k);
}

A &operator=(const A &a)
{
k = a.k;
return *this;
}

A &operator+(const A &a) const
{
A s(k + a.k);
s.pr();
return s;
}
};


Правилен ли оператор +, помойму нет, ведь s уничтожается до возвращения? И если не правильно, то как сделать правильно? через static?

Глупый вопрос по operator+ Оценить
Posted via RSDN NNTP Server 1.7 "Bedlam"
Respectfully,
Alexander Fedin.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.