每日 C++ - 基类构造调用纯虚函数的一个问题
程序员文章站
2022-05-14 13:11:59
...
我们来看下面的一段代码
class Base {
public:
Base() { Does(); }
virtual ~Base() { }
virtual void test() = 0;
void Does()
{
std::cout << "Does";
test();
}
};
class Derived : public Base {
public:
Derived() {};
~Derived() {};
void test() override
{
std::cout << "derived test" << std::endl;
}
};
我们看到 Base 中的构造函数调用类的 Does(),而 Does() 中调用了 test()。在编译过程中并没有发生任何错误,但是当你去执行时,就会发现
pure virtual method called
terminate called without an active exception
这类代码问题其实并不常见,但如果遇到,可以从这个方面入手。
如果析构在纯虚函数调用之前,也会发生类似问题
std::unique_ptr<Base> b = make_unique<Derived>();
b->~Base();
b->test();
祝愉快!
下一篇: 关于防刷票的一些问题