Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] throw classname()... 28.11.01 23:14 Число просмотров: 1014
Автор: Biasha <Бяша> Статус: Member
|
Я думал, что понимаю как throw работает, но, похоже, это не так.
Такой значит вопрос:
#include <iostream.h>
class ce
{
char data[16];
public:
ce() { cout << "ce\t" << this << endl; };
ce(const ce &e) { cout << "cec\t" << this << endl; };
~ce() { cout << "~ce\t" << this << endl; };
};
main()
{
try
{ throw ce(); }
catch(ce &e)
{ cout << "catch\t" << &e << endl; }
}
---
Ничего удивительного нет:
ce 0x0012FF5C
catch 0x0012FF5C
~ce 0x0012FF5C
Теперь закомментируем не используемый конструктор копирования
// ce(const ce &e) { cout << "cec\t" << this << endl; };
И что же мы видим:
ce 0x0012FF4C
catch 0x0012FF5C
~ce 0x0012FF5C
То есть либо вызвался конструктор копирования по умолчанию, и забыл вызваться деструктор первого класса, либо класс самопроизвольно переместился в памяти. Либо я торможу.
P.S.
Может это нормально, когда классы сами ходят?
P.P.S.
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
|
- [C++] throw classname()... - Biasha 28.11.01 23:14 [1014]
|
|
|