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; // 错误

总结(面试一句话背)

阻止类实例化的四种方法:

  1. 构造函数私有化
  2. 构造函数 = delete
  3. 包含纯虚函数,变成抽象类
  4. 析构函数私有化

最常用、最标准的是:

私有化构造函数 或 =delete

posted @ 2023-07-12 21:42  CodeMagicianT  阅读(543)  评论(0)    收藏  举报