typedef std::shared_ptr<foo> Object;
class UI{
static std::vector<Object> objects;
public:
void add(Object x) { objects.push_back(x); }
void remove(Object x) { /* コンテナからの削除を書き忘れた */ }
};

うーん・・・