命令C++全局变量破坏?
我有两个全局变量:命令C++全局变量破坏?
static mutex m;
static object o;
和自毁| O |需要使用| n |
~object() {
auto_lock(&m);
}
但是,我发现有时候| m |已经遭到破坏。 我想知道全局变量destruct的顺序吗?
破坏者总是以相反的顺序被调用。但是,如果两个变量都位于不同的编译单元中,那么很难判断哪个变量会先构建。但是如果你的变量位于单个编译单元中,那么你应该是安全的。
我明白了。谢谢。 – wppiwyye
您可以使用引用计数和自毁方法 - 在堆上创建m
和o
,并将它们包装到某种引用计数和销毁容器中。因此,当您创建o
时,您应该在m
上增加引用计数,并且当您销毁o
时,应该减少引用计数m
。因此,您可以控制构建/销毁全局变量的顺序。希望这可以帮助。
谢谢你的帮助。我会尝试。 – wppiwyye
这个问题可以通过依赖注入来解决(例如,声明互斥量作为主要的第一件事,并将它传递给对象的构造函数)。
向我们展示更多代码。 – Losiowaty
“我发现[它]已被破坏”。你是怎么发现的? – JBL
'struct MyStruct {mutex m;对象o; }'然后是一个全局的MyStruct实例,并且您已设置。但是,我怀疑你*真的需要全球性的 – stijn