在http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp给出的示例中,我们可以看到这样的代码块:
void do_accept()
{
acceptor_.async_accept(socket_,
[this](boost::system::error_code ec)
{
if (!ec)
{
std::make_shared<session>(std::move(socket_))->start();
}
do_accept();
});
我是C ++ 11的新手。所以我想知道这个代码是否会导致堆栈溢出(过多的递归调用),因为do_accept()会记录do_accept()的回调。
感谢。
答案 0 :(得分:7)
不。 async_accept
将触发异步调用并立即返回 - do_accept
因此在调用后立即返回。
稍后,异步调用将完成,并且将调用do_accept
以触发另一个异步调用。不涉及递归。