2017-07-28 77 views
0

我有一个小的代码片段,使用Thrift进行网络通信。是否boost :: shared_ptr <TTransport>关闭连接一旦被销毁?

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

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

由于shared_ptr是在主函数的作用域中创建的,并且没有其他人向shared_ptr提供指向该对象的指针,所以'socket'在超出作用域后将会被破坏。

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

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

+1

是的,我刚才看了一下源代码并找到了相同的东西。谢谢! –

相关问题