【发布时间】:2020-06-02 20:23:13
【问题描述】:
当我链接一个包含静态对象的文件时,该对象的构造函数都会运行,而不管该对象是否曾经被使用过,或者是否包含头文件。 g++ 中有没有办法阻止这种行为的发生,或者是不链接文件的唯一答案?
foo.h
#include <iostream>
class Bar {
public:
Bar(int inMemberInt) {
std::cout << "In Bar constructor." << std::endl;
}
};
class Foo {
public:
static const Bar constVar;
};
foo.cpp
#include "foo.h"
const Bar Foo::constVar(1);
main.cpp
#include <iostream>
int main() {
std::cout << "Hello." << std::endl;
return 1;
}
构建命令
g++ foo.h foo.cpp main.cpp -o main
输出
In Bar constructor.
Hello.
【问题讨论】:
-
你问的是延迟初始化吗?
-
我不确定标准是否允许,但如果是,则必须保证没有副作用。由于您打印,这将是一个副作用,因此无法删除。
-
constVar必须是静态 data 成员吗?如果没有,那么像 Meyer 的单例可能会给你你想要的行为。
标签: c++ build static linker g++