Возможно малочисленному сообществу разработчиков для WinCE
будет интересно знать о следующей проблеме, с которой я только что столкнулся.
class CTestClass
{
public:
CTestClass()
{
wchar_t mess[100];
swprintf(mess,_T("this == %p"),this);
::MessageBox(NULL,mess,_T("default constructor"),0);
}
CTestClass(const CTestClass& other)
{
wchar_t mess[100];
swprintf(mess,_T("this == %p, &other == %p"),this,&other);
::MessageBox(NULL,mess,_T("copy constructor"),0);
}
virtual ~CTestClass()
{
wchar_t mess[100];
swprintf(mess,_T("this == %p"),this);
::MessageBox(NULL,mess,_T("destructor"),0);
}
};
void TestAction(CTestClass obj)
{
wchar_t mess[100];
swprintf(mess,_T("&obj == %p"),&obj);
::MessageBox(NULL,mess,_T("TestAction"),0);
}
Если вызвать функцию TestAction следующим образом,
TestAction(CTestClass());
то программа покажет 3 разных диалога:
— диалог от "default constructor"
— диалог от функции "TestAction"
— диалог от "destructor".
Так вот, адреса, которые будут показаны в 1-м случае и
в двух других случаях, будут разными

.
Еще осталось добавить, что все это справедливо для eVC 4.0
с установленным сервис паком. Генерация кода проводилась для
процессора "ARMV4I". Компилятор для эмулятора этой проблемы не имеет.
Компиляторы для других процессоров проверить, к сожалению, не могу.
12.09.03 18:44: Перенесено модератором из 'C/C++' — AS