请帮忙,
问题:以下代码中的核心转储:
我有一个抽象类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;
}
};
我在其他翻译单元中有一些MyClass类型的静态变量。
问题很奇怪,因为当程序退出时会出现分段错误。当然,默认可以在向量之前解除分配,但有什么区别?当main已经完成时,两者都被解除分配。
非常感谢你的帮助。
答案 0 :(得分:4)
你最有可能在另一端遇到静态初始化惨败。基本上,静态持续时间对象的破坏顺序与其创建的顺序相反。所以如果你有:
void foo() {
static type a;
}
void bar() {
static type b;
}
int main() {
foo();
bar();
}
构建将首先创建a
,然后b
,main
完成时,它会销毁b
然后a
。如果您在main
中切换通话顺序,则订单将被反转。出于这个特殊原因,在处理依赖关系的静态持续时间变量时必须要注意。