C 可以使destuructor不称为班级成员和基类攻击方的灾难
C++ Possible to make a destructor NOT call the destructor of class members and the destructor of the base class?
是否有一种方法可以使班级的驱动器不称为"班级成员"之一的破坏者和/或不称呼其基类的删除仪?
如果这是不可能的,是否可以通过安置新的和破坏(/不毁灭(手动创建某些类成员?谢谢!
编辑:我需要这个的原因:C类拥有对象M。M具有非平凡的破坏者。C是M的朋友,并以某种方式管理M的MAND MANE MANDE无需称呼M的驱动器。可以称呼它是可以的,但意味着性能开销。(在这种情况下,这是一个问题。(我当时在想将A派生为M的A派生级别,该类别的驱动器无助,但这仍然称为基础的攻击者。
在施工时,C 确保首先调用子类配件,然后构成成员,最后应用适当的构造函数。在破坏时,符号进行了。
这意味着您无法在对象被破坏后立即阻止基础类驱动器的应用,也无法阻止任何成员构造函数。如果您只想破坏某些东西,则必须找到一种不破坏对象的方法(只需使用原始指针...(,并在想要的东西上手动调用破坏者。但是您当然不想这样做!
C 对程序员技能非常有信心,因此很容易编写一个调用不确定行为的程序。如果您发现自己试图颠覆C 编译器,以不称呼基类或成员的破坏者,那么您会有一个重大问题。您不想销毁的成员不应该是成员,而是更可能是指针(原始或共享(或对具有其终生管理的外部对象的引用。 base类也可能是指指针或对外部对象的引用,在这里,生命周期可以(并且应该(在课堂之外进行管理。
如果驱动器具有可观察到的副作用,那么在不调用灾难的情况下结束对象的寿命将是不确定的行为。C 14 [BASIC.LIFE]/4:
程序可以通过重复对象所占据的存储或明确调用具有非平凡驱动器的类型对象的驱动器来结束任何对象的寿命。对于具有非平凡驱动器的类类型的对象,该程序不需要在重用或释放对象所占据的对象占据的存储之前明确调用灾难。但是,如果没有明确呼叫击击器,或者不使用删除表达来释放存储空间,则不应隐式调用驱动器,并且任何取决于驱动器产生的副作用的程序都具有不确定的行为。<<<<<<<<<<<<<<<<<</p>
所以,没有办法解决它。也许您可以重新设计您的代码,以便驱动器不会执行任何不必要的语句,或者其他内容。
- std::具有相同基类的类的变体
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 基类中的函数名称解析
- C++初始化基类
- 如何通过派生类函数更改基类中的向量
- 如何定义一个纯抽象基类
- 如何使用基类指针引用派生类成员
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 如果基类包含双指针成员,则派生类的构造函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 为什么此派生对象无法访问基类的后递减方法?
- 公开最直接的基类模板名称
- 当基类是依赖类型时,这是一个缺陷吗
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 模板基类中的静态变量
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- C 可以使destuructor不称为班级成员和基类攻击方的灾难