shared_ptr in a class hierarchy
class Stream {
public:
virtual ~Stream () {}
protected:
class Data {
protected:
Data () {}
virtual ~Data () {}
};
Stream (std::shared_ptr<Data>&& _data) : data(_data) {}
private:
std::shared_ptr<Data> data;
};
class Socket : public Stream {
public:
virtual ~Socket () {}
Stream NewSocket (const Node& node) {
return Socket (std::make_shared<Data>(node));
}
private:
class Data : public Stream ::Data {
public:
Data (const Node& _node) : node(_node) {}
virtual ~Data () {}
private:
const Node node;
};
Socket (std::shared_ptr<Data>&& data) : Stream(data) {}
};
class StreamImpl {
public:
virtual ~StreamImpl () {}
protected:
StreamImpl () {}
};
typedef std::shared_ptr<StreamImpl> Stream;
class Socket : public StreamImpl {
public:
Socket (const Node& _node) : node(_node) {}
virtual ~Socket () {}
private:
const Node node;
};
class Stream : public std ::enable_shared_from_this<Stream> {
public:
Stream () {}
virtual ~Stream () {}
};
class Socket : public Stream {
public:
std::shared_ptr<Socket> NewSocket (const Node& _node) {
return std::make_shared<Socket>(_node);
}
virtual ~Socket () {}
Future<size_t > write (const std::string& data) {
self = shared_from_this ();
...
}
private:
Socket (const Node &_node) : node(_node) {}
const Node node;
std::shared_ptr<Stream> self;
}