そのため、ほとんどのチュートリアルで提供されている次の C++ リサイクル サーバーの実装をクラス形式に変換しようとしています。
int port = 9090;
shared_ptr<SomethingHandler> handler(new SomethingHandler());
shared_ptr<TProcessor> processor(new SomethingProcessor(handler));
shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
TSimpleServer server(processor, serverTransport, transportFactory, protocolFactory);
そのために、すべての shared_ptrs メンバーと TSimpleServer メンバーを作成しましたが、初期化割り当てで問題が発生しています。
初期化リストで shared_ptr を構築すると、badmalloc エラーが発生するようです。そのため、私の回避策は、それらをメンバーとして宣言し、代入を通じて初期化することでした。
handler = shared_ptr<type>(new Type).
ここでの問題は、TSimpleServer には void を取る代入演算子またはコンストラクターがないため、コンストラクター時に構築されるために依存する shared_ptrs が必要であるため、構築できることです。
私がここで見逃していることはありますか?
より多くの疑似コード:
class myclass {
int port;
shared_ptr<MyHandlder> handler;
shared_ptr<TProcessor> processor;
shared_ptr<TServerTransport> serverTransport;
shared_ptr<TTransportFactory> transportFactory;
shared_ptr<TProtocolFactory> protocolFactory;
TSimpleServer server;
public:
explicit myclass(): port(9090), handler(new MyHandler()), processor(new MyProcessor(handler)), serverTransport(new TServerSocket(port)), transportFactory(new TBufferedTransportFactory()), protocolFactory(new TBinaryProtocolFactory()), server(processor, serverTransport, transportFactory, protocolFactory) { }
int start () { server.serve() }