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

按什么顺序删除聚合类?

c++
  •  3
  • Julio  · 技术社区  · 16 年前

    class A  
    {  
        B _b;  
        C _c;  
    } 
    

    b和c将以什么顺序被删除?

    A::A():  
    _c(...),  
    _b(...)  
    {  
    }
    


    3 回复  |  直到 16 年前
        1
  •  7
  •   CB Bailey    16 年前

    _c _b 被销毁,与它们在类中的声明顺序相反。

        2
  •  6
  •   Salman A    16 年前

    它们按照创建时的相反顺序被销毁(而不是删除)。这也要求无论构造函数是如何编写的,所有成员都必须以一致的顺序构造。如果每个构造函数都可以定义成员的构造顺序,那么每个类实例都必须携带有关其构造方式的信息,以便能够以相反的顺序销毁。通过将顺序定义为始终是成员在类定义中声明的顺序,构造顺序不会因构造函数而异。

    在您的示例中,首先,为整个A类分配内存。下一步 _b 那么,它就被建造了 _c 然后 A 如果A有一个基类,那么它将在上述任何一个基类之前完全构建。删除时,情况正好相反。第一 c 那么,它就被破坏了 b

        3
  •  0
  •   loic    16 年前

    A::A():  
    _c(...),  
    _b(...)  
    {  
    }
    

    意味着与之相同的构造/破坏顺序

    A::A():  
    _b(...),
    _c(...)  
    {  
    }