狂ったお茶会のlog

後で起きる自分のためのメモ

const char* に std::string を代入するときの注意点

しばらく前に仕事で直したバグのmemo

const char* hoge;
if(piyo)
{
    std::string fuga = cocos2d::StringUtils::format("piyopiyo"); //生成
    hoge = fuga.c_str(); //代入
}

この場合fugaはif文の外に出ると破棄されて死ぬ(ここまではわかる)
hogeはif文の外で定義されているからこれ以降も使えるかと思いきや、
fugaが破棄されるときに、hogeが参照している先の実体が死ぬということなので、つまりhogeも死ぬ

で合ってるのかな...

とりあえず、逆にすれば問題なくなる

std::string hoge;
if(piyo)
{
    const char* fuga = "piyopiyo"; //生成
    hoge = cocos2d::StringUtils::format(fuga); //代入
}