Dmi*_*kov 1 c++ static-members static-functions
请帮忙,
问题:以下代码中的核心转储:
我有一个抽象类 SomeOtherClass,并从它派生了 SomeOtherClassImpl。
这是导致问题的代码:
class MyClass
{
public:
void someFunction()
{
myVector().push_back(someOtherClassDefault());
}
private:
static std::vector<SomeOtherClass const *> & myVector()
{
static std::vector<SomeOtherClass const *> theVector;
return theVector;
}
static SomeOtherClass const * someOtherClassDefault()
{
static SomeOtherClassImpl theDefault;
return &theDefault;
}
};
Run Code Online (Sandbox Code Playgroud)
我在其他翻译单元中有一些 MyClass 类型的静态变量。
这个问题很奇怪,因为程序退出时会发生分段错误。当然 theDefault 可以在 theVector 之前被释放,但是有什么区别呢?当 main 已经完成时,两者都被解除分配。
您的帮助将不胜感激。
您很可能遇到了静态初始化失败,就在另一端。基本上,静态持续时间对象的销毁顺序与创建的顺序相反。所以如果你有:
void foo() {
static type a;
}
void bar() {
static type b;
}
int main() {
foo();
bar();
}
Run Code Online (Sandbox Code Playgroud)
建设将首先创建a,然后b,当main完成时,它会破坏b则a。如果您切换 中的调用main顺序,则顺序将被颠倒。由于这个特殊原因,您在处理依赖项上的静态持续时间变量时必须注意。