NoFear

导航

non-local static对象初始化【EC++笔记】

Posted on 2012-03-17 11:26  Fear_Hao  阅读(424)  评论(0编辑  收藏  举报
View Code
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;
}