析构函数会破坏静态成员吗​​?

sic*_*ini 12 c++

说我有:

class A
{
    A()
    {}
    ~A()
    {}
};

class B
{
public:
    B()
    {}
    ~B()
    {}
private:
    static A mA;
};

B* pB = new B; 
delete pB;
Run Code Online (Sandbox Code Playgroud)

当我调用delete pB时,将调用B的析构函数.那么这会为析构函数调用静态成员A吗?

fut*_*te7 23

关键字static表示变量独立于实例.这就是为什么你可以访问静态变量和方法而不首先从类中实例化一个对象.这就是为什么销毁实例不会影响任何静态变量的原因.


Mat*_*hen 12

当然不是.首先,您已经定义了一个显式的空析构函数.如果默认的析构函数这样做,你就永远不会破坏实例而不会冒使类无法使用的风险.

  • 显式空析构函数的存在并不重要. (3认同)

Kor*_*icz 8

C++标准版03,9.4.2静态数据成员:

静态数据成员不是类的子对象的一部分.class.class的所有对象共享的静态数据成员只有一个副本.

静态数据成员不是类的一部分 - 因此它不依赖于类的生命周期,也不依赖于构造或破坏.

建筑(9.4.2/3)

一旦定义了静态数据成员,即使没有创建其类的对象,它也会存在.它的类已经被创建.

毁灭(9.4.2/7)

静态数据成员的初始化和销毁​​与非本地对象完全相同.