Foo と Bar の 2 つのクラスがあります。Bar は Foo への参照を維持し、Foo のメソッドを呼び出してその状態を変更するメソッドを持っています。コードを以下に示します。
class Foo
{
private:
double m_value;
public:
void setValue(double value) {
this->m_value = value;
};
double getValue() {
return this->m_value;
};
};
class Bar
{
private:
Foo& m_foo;
public:
Bar() : m_foo(Foo()) {
};
void setFooValue(double value) {
m_foo.setValue(value);
};
double getFooValue() {
return m_foo.getValue();
};
};
以下のように、設定後に foo の値にアクセスしようとすると、問題が発生します。
Bar bar;
bar.setFooValue(10000.0);
double value = bar.getFooValue();
std::cout << "Foo value is: " << value << std::endl;
どの出力Foo value is -9.25596e+061
. メモリが壊れているようです - なぜですか? m_foo を参照として保存しない (つまり、を使用するFoo m_foo;
) と問題が解決することは理解していますが、これがなぜなのかわかりません。
さらに困惑するのは、リリース モードで実行している場合、上記のコードが目的どおりに機能することです。
Visual Studio 2010 を使用してコンパイルしています。
よろしくお願いします!