0
我有以下类别:为什么std :: vector :: push_back具有虚拟析构函数的segfaults?
class Thing
{
public:
Thing() {};
virtual ~Thing() {}
};
class MyOwnThing : public Thing
{
public:
std::vector<int> m;
MyOwnThing() {};
void init()
{
m.push_back(0);
m.push_back(0);
m.push_back(0);
m.push_back(0);
m.push_back(0);
m.push_back(0);
m.push_back(0);
m.push_back(0);
m.push_back(0);
m.push_back(0);
m.push_back(0);
puts("done");
}
};
没有什么至今不寻常的,除了在基类中的虚析构函数。现在,这是我的主要功能正在做:
int main()
{
MyOwnThing *t = (MyOwnThing *) new Thing(); // (1)
t->init();
delete t;
return 0;
}
上面的代码生成的第二个呼叫到push_back
一个不错的段错误。如果我从Thing
中删除虚拟析构函数,那么所有东西都可以顺利运行。怎么了?
1)我怀疑这个演员阵容可能是问题的根源。
演员阵容看起来相当可疑IMO。为了清晰(至少),我会使用'dynamic_cast'或'static_cast'。演员阵容也可能会进行重新演绎。 – UnholySheep
由于C++使用OO多态性,您对此有严重的误解。 [选择一本好书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list),并回到基础。 – StoryTeller
删除代码中的转换,并在没有转换的情况下进行修复。作为一般规则,每当您发现自己需要演员阵容时,因为其他方面存在编译器错误,您在投射前需要考虑10次。机会是,你做错了什么。 – SergeyA