>>664-665 レスサンクス

[修正]
shared_ptr Create() { return shared_ptr(new Inner()); }
↓
static shared_ptr Create() { return shared_ptr(new Inner()); }

shared_ptr inner;
↓
Inner::shared_ptr inner;

変数nameの非const GetName() については、例えば outer->GetName().replace(... とかそんな感じで使用することを想定しています
非const参照を得る方法を提供しないで、Outerクラスで同じ関数を用意するべきですか?
実際は非const側の GetName() はほとんど使わないのですが

void GetName(string * pOutput) {
  *pOutput = this->name;
}

とかの方がいいですか?