Здравствуйте, IvanGrozny, Вы писали:
IG>Здравствуйте, bkat, Вы писали:
B>Возможно малочисленному сообществу разработчиков для WinCE
B>будет интересно знать о следующей проблеме, с которой я только что столкнулся.
B>Если вызвать функцию TestAction следующим образом,
B>B>TestAction(CTestClass());
B>
B>то программа покажет 3 разных диалога:
B>- диалог от "default constructor"
B>- диалог от функции "TestAction"
B>- диалог от "destructor".
B>Так вот, адреса, которые будут показаны в 1-м случае и
B>в двух других случаях, будут разными
.
IG>сдесь все нормально:
IG>поинтер на класс перемещается, потому разные адреса.
IG>показывает адрес однои функции, другои... и тд.
Что-то не понял... Куда и зачем перемещается поинтер на класс?
Можно немного подробней?
Кстати, а что ты ожидаешь увидеть, если выполнить?
CTestClass originalObj;
TestAction(originalObj);
В этом случае, кстати, copy constructor и функция TestAction
тоже покажут разные адреса.
Ну и, наконец, что если CTestClass будет таким:
class CTestClass
{
CTestClass *m_this;
public:
CTestClass()
{
m_this = this;
}
CTestClass(const CTestClass& other)
{
m_this = this;
}
virtual ~CTestClass()
{
assert(m_this==this);
}
};
В моем случае мы напоремся на assert в деструкторе.