boost::shared_ptr<TTransport> 是否在销毁后关闭连接?
Does boost::shared_ptr<TTransport> close connection once destroyed?
我有一个使用 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, I don't see TTransport doing anything in its destructor. However, the destructor of TSocket (src),确实调用了它的 close() 函数。
由于 shared_ptr 是在您的主函数范围内创建的,并且没有其他人请求指向 shared_ptr 对象的指针,'socket' 将析构超出范围后。
TBufferedTransport 似乎没有显式声明析构函数,但是,它确实拥有一个 TSocket,当 TBufferedTransport 析构时它将超出范围,因此 TSocket 的析构函数被调用。
TBufferedTransport::[rBuf_/wBuf_] 是 scoped_arrays 所以我认为你也不需要担心这些。
我有一个使用 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, I don't see TTransport doing anything in its destructor. However, the destructor of TSocket (src),确实调用了它的 close() 函数。
由于 shared_ptr 是在您的主函数范围内创建的,并且没有其他人请求指向 shared_ptr 对象的指针,'socket' 将析构超出范围后。
TBufferedTransport 似乎没有显式声明析构函数,但是,它确实拥有一个 TSocket,当 TBufferedTransport 析构时它将超出范围,因此 TSocket 的析构函数被调用。
TBufferedTransport::[rBuf_/wBuf_] 是 scoped_arrays 所以我认为你也不需要担心这些。