我有一个使用 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();
可以注释掉没有任何问题吧?
最佳答案
查看the source ,我没有看到 TTransport 在其析构函数中执行任何操作。但是,TSocket ( src ) 的析构函数确实调用了它的 close() 函数。
由于 shared_ptr 是在您的 main 函数的范围内创建的,并且没有其他人请求指向负责 shared_ptr 的对象的指针,因此“套接字”将在超出范围后析构。
TBufferedTransport似乎没有明确声明析构函数,但是,它确实拥有一个 TSocket,当 TBufferedTransport 析构时它将超出范围,因此 TSocket 的析构函数被调用。
TBufferedTransport::[rBuf_/wBuf_] 是 scoped_arrays 所以我认为你也不需要担心这些。
关于c++ - boost::shared_ptr<TTransport> 是否在销毁后关闭连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45364528/