Re[2]: MS embedded VC 4.0 bug
От: bkat  
Дата: 09.05.03 07:52
Оценка:
Здравствуйте, 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 в деструкторе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.