boost :: shared_ptr <ttransport>关闭连接一旦被破坏了吗?

时间:2017-07-28 03:46:21

标签: c++ thrift

我有一个小代码段,使用Thrift进行网络通信。

int main() {
  while (true) {
    boost::shared_ptr<TTransport> socket(new TSocket("localhost", 9090));
    boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
    boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));

    CalculatorClient client(protocol);

    try {
      transport->open();

      client.ping();
      cout << "ping()" << endl;

      // following line is commented out intentionally
      //transport->close();
    } catch (TException& tx) {
      cout << "ERROR: " << tx.what() << endl;
    }
  }
}

我的问题是:一旦销毁了boost :: shared_ptr关闭连接吗?如果是,那么transport->close();可以毫无问题地被注释掉,对吗?

1 个答案:

答案 0 :(得分:1)

看着the source,我没有看到TTransport在其析构函数中做任何事情。但是,TSocket(src)的析构函数确实称它为close()函数。

由于shared_ptr是在main函数的范围内创建的,并且没有其他人请求指向对象的指针来处理shared_ptr,&#39; socket&#39;在它超出范围后会破坏。

TBufferedTransport似乎没有明确地声明析构函数,但是,它确实拥有一个TSocket,当TBufferedTransport析构时它将超出范围,从而调用TSocket的析构函数。

TBufferedTransport :: [rBuf_ / wBuf_]是scoped_arrays所以我不认为你需要担心这些。