昨晚约了个面试,面试官问平时有没遇到CoreDump的情况,我当然遇到过啊,换以前肯定张口就来,但我有好一段时间都没遇到CoreDump了,导致我一时没想起来。
上厕所的时候突然想起了,记录下吧。
场景1举例:
class base{
int *m_sameVariable;
public:
base(int iNumber = 0)
: m_sameVariable(nullptr){
}
virtual ~base(){
delete m_sameVariable;
}
void publicFunc(){
m_sameFunction(); //调此函数就为模拟工程场景,而增加的复杂度,实际跟直接*m_sameVariable没区别的
}
virtual void DynamicCall(){
//do something
}
void m_sameFunction(int val = 10){
*m_sameVariable = val;
}
};
class child : public base{
int *m_sameVariable;
public:
child(int iNumber = 0)
: m_sameVariable(new int(iNumber)){
}
virtual ~child() override{
delete m_sameVariable;
}
virtual void DynamicCall(){
publicFunc();
}
void m_sameFunction(){
*m_sameVariable = 10;
}
};
int main(int argc, char *argv[])
{
base *pTest = new child(10);
pTest->DynamicCall();
return 0;
}
场景2举例:
class base
{
int *m_sameVariable;
public:
void SetData(int iNumber = 0){
m_sameVariable = new int(iNumber);
}
void publicFunc(){
DynamicCall();
}
virtual void DynamicCall(){
*m_sameVariable = 10;
}
};
class child : public base
{
int *m_sameVariable;
public:
void SetData(int iNumber = 0){
}
virtual void DynamicCall(){
*m_sameVariable = 10;
}
};
int main(int argc, char *argv[])
{
base *pTest = new child;
pTest->SetData(0);
pTest->publicFunc();
return 0;
}
实际工程中的代码比示例代码复杂得多,但核心也差不多是这样。这两种都是不熟悉名字查找规则与多态规则导致的。
原文:https://www.cnblogs.com/Keeping-Fit/p/14584053.html