欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

每日 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();

祝愉快!

相关标签: 每日 C++