代码之家  ›  专栏  ›  技术社区  ›  doron

受保护与私有析构函数

c++
  •  26
  • doron  · 技术社区  · 15 年前

    C++中的保护和私有析构函数有什么区别吗?如果基类析构函数是私有的,我想在删除派生类对象时仍然会调用它。

    4 回复  |  直到 15 年前
        1
  •  27
  •   Amir Rachum    15 年前

    取自 here:

    如果构造函数/析构函数声明为private,则不能实例化该类。

    这是正确的,但是它可以从类中的另一个方法实例化。类似地,如果析构函数 private ,则对象也只能从类内部删除。此外,它还防止类被继承(或者至少防止继承的类被实例化/销毁)。

        2
  •  31
  •   Abhay    15 年前

    如果基类析构函数 private protected 那你就不能打电话了 delete 通过基类指针。

    使用受保护的析构函数防止通过基类指针销毁派生对象。它限制了派生类对destructor的访问。它可以防止自动 (堆栈)基类的对象。

    允许任何 其他 派生语言的多态性使用 类通过指向基的指针,但不是 指针。Example:- Abstract 基类/接口。

    但是 , non-virtual destroy()

        3
  •  9
  •   Nemanja Trifunovic    15 年前

    以下代码将导致编译器错误(VC2010): C2248:'base::~base':无法访问类'base'中声明的私有成员

    class base
    {
        ~base(){}
    };
    
    class derived : public base
    {
    };
    
    int main ()
    {
        derived* d = new derived;
    
        delete d;
    }
    

    但是,如果将基析构函数更改为受保护,则一切正常。

        4
  •  6
  •   Omnifarious    15 年前