PCLVisualizer のメンバー関数にIDを渡す時、

それが、const std::string & id; となっている事を忘れてはならない。

ああ、関数内で変わらないのね。あっそ!

と、お気楽に構えていると痛い目にあう。


おそらく、登録系の関数 addTextとか addなんちゃら系は

は id をコピーせずに、参照をそのまま保持して永久参照している。

で、参照・再定義系の updateなんちゃら、は一時参照のみだ。


つまり、呼び出し側で auto変数やデストラクトされる変数で id を渡すと、不幸せが訪れる。


std::string id = "test#" + std::to_string(no);
viewer->addText("hogehoge", pos_x, pos_y, id);


とかやって、id がデストラクトされたり、

2度目の呼び出しで id の値を破壊してしまうと、

後々不幸になる。


オブジェクティブな環境は

暗黙の了解がありすぎて、今一つなじめない。