gpt4 book ai didi

C++ 共享库 : Pure virtual function does not cause link error

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:25 25 4
gpt4 key购买 nike

我一直在努力理解为什么我可以在我正在使用的库中尚未实现的头文件中创建一个纯虚函数,并且这不会导致链接甚至运行时失败。.上面的内容可能有点不精确,但这里有一些代码来支持它。

这是一个接口(interface)定义:

class A
{
public:
static A* Create();

virtual ~A() {}

virtual status_t start() = 0;
virtual status_t stop() = 0;
};

我有一个 C++ 共享库,其中包含一个实现“AImpl”+ A::Create() 函数(见下文):

A* A::Create {return new AImpl;}

class AImpl : public A
{
public:
A() {}
virtual ~A() {}

virtual status_t start() {}
virtual status_t stop() {}
};

我构建共享库 - 没问题。现在我在 A 类的头文件中添加另一个纯虚函数:

class A
{
public:
static A* Create();

virtual ~A() {}

virtual status_t start() = 0;
virtual status_t stop() = 0;
virtual status_t write() = 0;
};

我创建了一个使用它的测试应用:

void main()
{
A* a = A::Create();
a->start();
a->stop();
a->write();
}

现在我明白上面的编译,但我认为它会链接失败,因为共享库中没有 write() 调用的实现。即使在运行时,也没有崩溃或任何事情发生。似乎跳过了 write 调用。任何人都可以帮助解释 - 将不胜感激:-)

谢谢 - 很抱歉这个冗长的问题,我有点难以在“单行”中解释确切的问题..

最佳答案

纯虚函数永远不会在链接过程中导致任何失败。相反,如果您尝试实例化抽象类型的对象,纯虚函数将导致编译错误。

提醒 - 抽象类型是一种具有(直接或间接通过继承)至少一个未被覆盖的纯虚函数的类型。

关于C++ 共享库 : Pure virtual function does not cause link error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35780745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com