メソッド内で定義したローカルクラスのポインタを返すのって、C++ の言語仕様的に
やっても大丈夫なのかな・・・。
あるいは言語仕様的には OK でもちゃんとコンパイルできない処理系があるとか・・・。
とりあえず g++ ではうまくいったわけだが。

---以下サンプルコード---

#include <iostream>

struct Giko {
 virtual void gorua() { std::cout << "ゴルア" << std::endl; }
};

struct Hoge {
 Giko* createGiko() {
  struct FusaGoko : public Giko {
   virtual void gorua() { std::cout << "フサフサ" << std::endl; }
  };
  return new FusaGoko();
 }
};

int main() {
 Giko* giko = Hoge().createGiko();
 giko->gorua();
 delete giko;
 return 0;
}