如果我没记错的话,静态链接意味着变量或函数是其编译单元的本地。这意味着在其他编译单元中可能存在具有相同名称和参数的变量或函数。
我想要一个班级。
假设我有多个编译单元需要确保在退出时正确删除。所以我使用atexit处理程序。但每个编译单元都应该放置自己的atexit-handler 我这样做的是这样做的:
class Init {
private:
static Init* self;
Init() {
std::atexit(Init::cleanup);
}
static void cleanup() {
// Do cleanup
}
};
Init* Init::self = new Init;
但如果我在各种CU中有多个名为Init
的类,则链接器会混淆。编译器不允许我static class Init {...}
。
如何归档我的清理(如果可能的话,使用名为Init
的类?)
答案 0 :(得分:3)
您可以将您的类放入未命名的命名空间。
然后,尽管类型没有联系,但也会产生同样的效果。
// Everything inside here is unique to this TU
namespace {
class Init { /** whatever **/ };
Init* Init::self = new Init;
}
int main()
{
// "Init" in here will refer to that which you created above
}