1

そのため、ほとんどのチュートリアルで提供されている次の 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() }
4

0 に答える 0