class TEST
{
public:
size_t TestFun1() const;
private:
int mNum;
};
extern TEST temptest; //修改前
TEST& tp() //修改后
{
static TEST temptest;
return temptest;
}
class TEST2
{
public:
TEST2(TEST temptest)
{
mNum = temptest.TestFun1(); //修改前
mNum = tp().TestFun1(); //修改后
}
private:
int mNum;
};
int main()
{
//extern TEST temptest; non-local static对象 非本地的静态对象
//假如temptest和temptest2是在不同的编译单元
//没办法保证temptest在temptest2之前被初始化
//方法:使用函数返回的"指向static对象"的引用,而不再使用static对象本身
//第一行初始化,第二行返回,保证提前初始化
TEST2 temptest2(temptest);
return 0;
}