gpt4 book ai didi

c++ - boost::shared_ptr 是否在销毁后关闭连接?

转载 作者:行者123 更新时间:2023-11-28 05:03:27 25 4
gpt4 key购买 nike

我有一个使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com