+/// A small utility to track the lifetime of an object.
+class Trackable {
+public:
+ Trackable() : p_(std::make_shared<int>(0)) {}
+ Trackable(Trackable const &) : Trackable() {}
+ Trackable(Trackable &&) : Trackable() {}
+ Trackable & operator=(Trackable const &) { return *this; }
+ Trackable & operator=(Trackable &&) { return *this; }
+ // This weak pointer lets you know if the parent object has been destroyed
+ std::weak_ptr<void> p() const { return p_; }
+private:
+ std::shared_ptr<void> const p_;
+};
+
+
+/** This class manages the pipes used for communicating with clients.