ハマり記録

まぁ,なんというか当たり前といえば当たり前なんだけど,スコープを広く持たせるあるクラス(例えば行列のクラスとか)のコンストラクタとして別のデータ元を指定したりするとき,その変数がメソッドとか関数内のローカル変数だった場合,その関数を抜けるとそのクラスの値もおかしくなる.

コーディング中にこれってよくないよな…と思いつついつの間にか忘れてそのままになってた.
具体的な例はこんな感じ.

class test
{
public:
  test();
  loop();
  
private:
  Mat *matrix;
  void initMat();
};

test::test()
{
  initMat();
}

void test::initMat()
{
  float a[100];
  for (int i = 0; i < 100; i++) {
    a[i] = (float)i;
  }

  matrix = new Matrix(10, 10, CV_32FC1, a);
}


解決策としては,データ元(上で言うfloat a[100])をstaticにするのが一番スマートなんだろうか…