试图了解作用域出口块在自动变量的解除分配方面将在哪里执行,我编写了这个程序:
#include <boost/scope_exit.hpp>
#include <iostream>
class A
{
public:
A()
{
std::cout << "A's constructor" << std::endl;
}
~A()
{
std::cout << "A's destructor" << std::endl;
}
};
class B
{
public:
B()
{
std::cout << "B's constructor" << std::endl;
}
~B()
{
std::cout << "B's destructor" << std::endl;
}
};
int main()
{
A a;
BOOST_SCOPE_EXIT()
{
std::cout << "Scope exit 1" << std::endl;
} BOOST_SCOPE_EXIT_END
B b;
BOOST_SCOPE_EXIT()
{
std::cout << "Scope exit 2" << std::endl;
} BOOST_SCOPE_EXIT_END
std::cout << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
A's constructor
B's constructor
Scope exit 2
B's destructor
Scope exit 1
A's destructor
Run Code Online (Sandbox Code Playgroud)
自动变量和范围退出块之间有一个共同的顺序。我想知道 boost 如何实现这一点?BOOST_SCOPE_EXIT 宏是否在堆栈上创建了一个对象,其析构函数执行退出块?