ぶろぐめんどくさい

技術系の記事と漫画レビューが入り混じった混沌

shared_from_thisはコンストラクタで使っちゃダメ

shared_from_this()はコンストラクタで使えない。 つまり下のようなコードは動かない。

#include <memory>

class A : public std::enable_shared_from_this
{
 public:
  A()
  {
    auto self = shared_from_this();
    ...
  }
}

だからこういう場合はshared_from_this()を含んだ初期化関数を別に用意して、オブジェクトを生成した後にその関数を呼び出せばいい。

なぜこうなるかといった理由は知らない。気になった人は各自調べて。