最近我的一位朋友问我如何在C++中阻止类继承.他希望编译失败.
我在考虑它并找到了3个答案.不确定哪个是最好的.
1)私人建设者
class CBase
{
public:
static CBase* CreateInstance()
{
CBase* b1 = new CBase();
return b1;
}
private:
CBase() { }
CBase(CBase3) { }
CBase& operator=(CBase&) { }
};
Run Code Online (Sandbox Code Playgroud)
2)使用CSealed基类,私有ctor和虚拟继承
class CSealed
{
private:
CSealed() {
}
friend class CBase;
};
class CBase : virtual CSealed
{
public:
CBase() {
}
};
Run Code Online (Sandbox Code Playgroud)
3)使用CSealed基类,受保护的ctor和虚拟继承
class CSealed
{
protected:
CSealed() {
}
};
class CBase : virtual CSealed
{
public:
CBase() {
}
};
Run Code Online (Sandbox Code Playgroud)
以上所有方法都确保不能继承CBase类.我的问题是:
1)哪种方法最好?还有其他方法吗?
2)除非CSealed类是虚拟继承的,否则方法2和3将不起作用.这是为什么 ?它与vdisp ptr有什么关系吗?
PS: …