У меня есть класс:
class A
{
public:
A();
~A();
void IncrementNum();
private:
int num;
};
A::A() : num(0)
{
}
A::~A()
{
}
void A::IncrementNum()
{
num++;
}
int main()
{
A obj;
obj.IncrementNum();
}
Когда я устанавливаю точку останова в конструкторе, он показывает, что num равно некоторому случайному значению (например, -2483290483), которое я принимаю как означающее, что оно не назначено. И конечно же, когда я вызываю IncerementNum () и устанавливаю точку останова на строке после num++
, это показывает точно то же самое (число равно некоторому случайному числу). Повторные вызовы IncrementNum () ничего не меняют, num не меняется.
Поэтому я решил вместо этого изменить num++
в num = 1
думая наверняка, это заставит num
установить. Нету. num
по-прежнему отображается как какое-то случайное число даже после дискретного задания его значения 1. Опять же, последовательные вызовы новой версии IncrementNum () не могут изменить его значение.
Есть идеи, что может быть причиной этого?
Другая информация:
Я использую Windows 7 Home Edition и Visual Studio 2010
Вы, вероятно, компилируете его в режиме Release. Компилятор видит это num
не используется нигде и оптимизирован. Попробуйте отобразить num
с printf()
или же cout
и попробуйте снова.
Других решений пока нет …