《NSIDE C++ MODEL》书中第六章关于局部静态对象有这么个例子
const Matrix&
identity(){
static Matrix mat_identity;
//....
return mat_identity;
}
局部静态对象mat_identity的构造和析构都只能执行一次,但是函数可能会被进入多次,C++编译器如何处理这个函数局部静态变量的呢?
方法1:
按照全局变量的做法,把局部静态对象的初始化和析构放到单元文件生成出的sti和std函数中去执行。
这样会有一个缺点,就是该单元文件中所有用到的局部静态对象的初始化和析构都必须拿出来放到那两个函数中,但是有可能拿出来初始化和析构的局部静态对象所申明的函数一次也没有被调用,这不是个好做法。
方法2:
使用临时指针的方法
代码如下:
Matrix mat_identity;
Matrix* pMat;
identity()
{
pMax ? 0 : mat_identity.Matrix::Matrix(), pMat = &mat_identity;
....;
}
然后在单元文件中增加std函数处理该局部静态变量的析构
如下:
void std()
{
pMat ? mat_identity.Matrix::~Matrix() : 0;
}
这样就可以处理函数局部静态变量的构造同时又可以避免构造不需要的函数局部静态变量