Я экспериментирую с явным вызовом деструктора объекта.Следующий код работает должным образом:
class Foo {
public:
~Foo() {
x_=x_+10;
std::cout << "x_ = " << x_ << std::endl;
}
int x() {
return x_;
}
int x_=0;
};
int main()
{
Foo f;
std::cout << "f.x() = " << f.x() << std::endl;
f.~Foo();
f.~Foo();
std::cout << "f.x() = " << f.x() << std::endl;
return 0;
}
И распечатка:
f.x() = 0
x_ = 10
x_ = 20
f.x() = 20
x_ = 30
Как и ожидалось, каждый раз, когда вызывается деструктор, x_ увеличивается на 10, поэтому мы видимпрогрессия от 10 до 20 до 30.
Однако, если мы удалим std::cout
из деструктора, например:
class Foo {
public:
~Foo() {
x_=x_+10;
}
int x() {
return x_;
}
int x_=0;
};
int main()
{
Foo f;
std::cout << "f.x() = " << f.x() << std::endl;
f.~Foo();
f.~Foo();
std::cout << "f.x() = " << f.x() << std::endl;
return 0;
}
Тогда распечатка станет:
f.x() = 0
f.x() = 0
Приращение в деструкторе больше не работает.Может кто-нибудь объяснить, почему на поведение деструктора может повлиять оператор print?