我最近被问到一个基本的C++问题,我实际上并不知道答案,我从来没有发现答案是什么.这是一个问题:
运行此程序时,可能会导致错误.您将对Base类进行哪些更改来修复它?
#include <iostream>
class Base {
public:
virtual void ShowMessage () {
std::cout << "Base class message\n";
}
// Something should be added here!
};
class Derived : public Base {
public:
explicit Derived (const std::string & value)
: myValue(value)
{
}
virtual void ShowMessage () {
std::cout << "Derived class message " << myValue << "\n";
}
private:
std::string myValue;
};
int main () {
Base * obj = new Derived("Test message");
obj->ShowMessage();
delete obj;
}
Run Code Online (Sandbox Code Playgroud)
它在我的机器上编译并运行得很好.有谁知道他们在找什么?
您需要向Base类添加虚拟析构函数.
class Base {
public:
virtual void ShowMessage () {
std::cout << "Base class message\n";
}
virtual ~Base() {}
};
Run Code Online (Sandbox Code Playgroud)
在您的情况下,Derived :: myvalue将无法正确发布.