答案:不会。
为什么会有这个疑问呢?
我们在多个cpp 包含同一个头文件后,在每个编译单元(cpp文件)编译的时候都会有一份,既然这样,那我们的一个静态实例对象在每个编译单元会不会都有一份,然后可执行二进制文件中会不会有多份呢?
测试一把
// static_test.h
#pragma once
#include <stdio.h>
class static_test {
public:
static static_test * Instance() {
static static_test instance;
return &instance;
}
int a;
};
// a.h
#pragma once
class A {
public:
void f();
};
// a.cpp
#include "static_test.h"
#include "a.h"
void A::f() {
static_test * i = static_test::Instance();
printf("A %p\n", i);
}
// b.h
#pragma once
#include <iostream>
#include <stdlib.h>
#include "static_test.h"
class B {
public:
void f();
};
// b.cpp
#include <iostream>
#include <stdlib.h>
#include "b.h"
#include "static_test.h"
void B::f() {
static_test * i = static_test::Instan