假设我有一个头文件,并假设复制宏已得到处理:f1.h:
Object& getObject() {
static Object obj;
return obj;
}
在包含此标头的任何地方,翻译单元都将拥有自己的 obj 副本。那么,如果 a.cpp、b.cpp、ch 包含这个头文件,obj 会被实例化 3 次?
现在,如果我有以下内容:
f2.h:
Object& getObject();
f2.cpp:
#include <f2.h>
Object& getObject() {
static Object obj;
return obj;
}
在这种情况下,我的标头被包含在内,但符号仅在 cpp 文件中创建。因此,链接器只能找到在 cpp 文件中创建的单个静态 obj 对象,而每个引用 .h 文件的翻译单元都会获得该符号?
这是对正在发生的事情的正确直觉还是这里有更多的作用?