一篇非常不错的探讨pure virtual function call错误的文章。
2007-10-22 10:49
666 查看
http://www.artima.com/cppsource/pure_virtual.html.
其中的最后一种可能性是比较搞的,我们程序中的一个错误就是因为这个原因出现的。
class Base {
virtual function() = 0;
};
class B : public Base{
virtual function() {
....
}
};
class A {
A(B* b) : _b(b) {}
~A {
_b->function();
}
B* _b;
};
B b;
A a(&b);
这种情况在某些编译器下会出pure virtual function call错误。主要的原因是因为全局变量的释放顺序不确定,全局变量A依赖全局变量B。
如果编译器决定让B先释放,A后释放。那么,当A析构时,_b是一个dangling pointer。此时如果b对象的内存系统没有释放的话,那么b的vptr表指向的是Base的vptr,而不是B的。此时,_b->function()就指向了pure virtual function了。
其中的最后一种可能性是比较搞的,我们程序中的一个错误就是因为这个原因出现的。
class Base {
virtual function() = 0;
};
class B : public Base{
virtual function() {
....
}
};
class A {
A(B* b) : _b(b) {}
~A {
_b->function();
}
B* _b;
};
B b;
A a(&b);
这种情况在某些编译器下会出pure virtual function call错误。主要的原因是因为全局变量的释放顺序不确定,全局变量A依赖全局变量B。
如果编译器决定让B先释放,A后释放。那么,当A析构时,_b是一个dangling pointer。此时如果b对象的内存系统没有释放的话,那么b的vptr表指向的是Base的vptr,而不是B的。此时,_b->function()就指向了pure virtual function了。
相关文章推荐
- 一篇关于pure virtual function call错误的文章.
- 【转载】一篇详尽分析C++“Pure Virtual Function Called”错误的文章
- image 的Css中的behavior属性导致 pure virtual function call 错误
- 【转】纯虚函数调用 pure virtual function call 错误
- mindmanager的R6025 - pure virtual function call错误解决办法
- mindmanager的R6025 - pure virtual function call错误解决办法
- Pure virtual function call error探讨
- Pure virtual function call error探讨
- 运行opencv程序后出现runtime error! R6025-pure virtual function call 错误提示的解决方法
- Box2d CreateFixture 发生错误 Debug Error:R6025 pure virtual function call 解决办法
- 纯虚函数调用 pure virtual function call 错误
- eclipse 中 r6025 pure virtual function call 错误的解决方法[转]
- pure virtual function call--虚函数调用的错误
- Pure virtual function call error探讨
- Pure virtual function call error探讨
- eclipse 中 r6025 pure virtual function call 错误的解决方法
- 一篇非常不错的前端面试文章
- 强烈推荐,非常好的一篇关于call/cc的文章,非常简单的英文。
- 一篇非常不错的前端面试文章
- 一篇相当不错的function入门文章