115.如何阻止一个类被实例化?有哪些方法?
115.如何阻止一个类被实例化?有哪些方法?
核心目的:让编译器无法调用构造函数。
方法 1:将构造函数声明为 private(最经典)
class A {
private:
A() {} // 构造私有
};
// A a; // 错误,无法实例化
方法 2:将构造函数 = delete(C++11 推荐)
class A {
public:
A() = delete;
};
// A a; // 错误
方法 3:把类变成抽象类(纯虚函数)
适合想让它只能做基类的场景:
class A {
public:
virtual void func() = 0; // 纯虚函数
};
// A a; // 错误,抽象类不能实例化
方法 4:析构函数私有化(较少用)
构造能调用,但析构不行,也无法在栈 / 全局实例化:
class A {
private:
~A() {}
};
// A a; // 错误
总结(面试一句话背)
阻止类实例化的四种方法:
- 构造函数私有化
- 构造函数 = delete
- 包含纯虚函数,变成抽象类
- 析构函数私有化
最常用、最标准的是:
私有化构造函数 或 =delete。

浙公网安备 33010602011771号