我正在开发一个 C++ 类,它提供了用于网络的 BSD 套接字的抽象。我想定义一个接口(interface) ISocket
,它由 CSocket
和 MockSocket
(后者用于单元测试)实现。我知道我需要定义我想要实现类的方法,以提供纯虚拟的方法,即
class ISocket {
public:
virtual int Socket(int domain, int type, int protocol) = 0;
};
我担心的是ISocket
类型的类能否被实例化。我的直觉告诉我,任何至少有一个纯虚方法的类都是一个抽象类(即接口(interface)),不能被实例化,但我内心深处有一个琐碎的担心,我需要对自动生成的方法做些什么C++ 编译器将提供的构造函数和析构函数(Effective C++ 既是礼物——当你记住你在其中阅读的所有内容时——也是诅咒——当你不记得时)。
我这样做是否正确,或者是否有我没有遵循的用 C++ 定义接口(interface)的最佳实践?
最佳答案
一般来说,你应该声明一个virtual
析构函数;否则,如果您尝试在指向接口(interface)的指针上调用 delete
,您将陷入未定义的行为。构造函数不存在此类问题。
哦,你是对的,不可能用纯虚拟实例化类的对象。
关于c++ - 如何在 C++ 中定义接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5790483/