【问题标题】:Can I destruct a structure in C++?我可以在 C++ 中破坏结构吗?
【发布时间】:2011-03-31 04:55:33
【问题描述】:

有没有办法破坏一个结构(不是一个类)?

【问题讨论】:

  • 可怕的问题,更大的图景是什么?你通常要么根本不这样做(它是一个自动变量),要么你在它上面调用delete(它是动态分配的。最好不必明确地这样做。)在任何其他情况下,结构都是类。

标签: c++ destructor


【解决方案1】:

C++ 中,structclass 完全相同,但成员和基的默认可见性除外。因此,如果有办法“破坏”一个类,您可以使用完全相同的方式“破坏”一个结构。

所以,如果你的 C++ 程序中有 struct s { },你可以这样做:

s *v = new s();
delete v; // will call structure's destructor.

【讨论】:

  • 或者只是让一个对象超出范围会调用析构函数。
  • @Martin:但让对象指针超出范围不会。做出区分很重要。在本例中,它是一个指针。
  • @Mark:确实。如果您使用new 创建了对象,则使用delete 将其销毁,或者,如果您够聪明,可以将其分配给智能指针来为您处理。如果您自动创建了对象,您就会让它自动超出范围。如果你调用了placement new 的原始力量来从原始位伪造对象,那么你调用析构函数将它扔回它来自的深渊——但通常你不想这样做。
  • 如果您的struct 中有newed 指针怎么办?那么当你delete你的struct时,那会是delete吗?
【解决方案2】:

除了默认的访问说明符(“private”用于类,“public”用于结构)之外,C++ 类和结构中的其他所有内容都相同。所以,是的,你可以像在类中一样在 struct 中编写和使用析构函数。

【讨论】:

    【解决方案3】:

    结构与类相同,只是默认可见性和继承是公共的(而不是私有的)。

    因此您可以像这样创建和销毁结构(与类相同,或内置类型):

    // Create on the heap, need to manually delete.
    MyStruct *const pStruct = new MyStruct();
    delete pStruct;
    
    // Created on the stack, automatically deleted for you.
    MyStruct struct;
    

    【讨论】:

      【解决方案4】:

      结构和类是相同的东西,只是由于两者之间的概念差异而发生技术差异(访问的默认字段)。然而,像类这样的每个结构都在必须创建对象时调用其构造函数,并在其可见性字段结束时调用其析构函数。

      在 C++ 中,结构的功能不亚于类。

      【讨论】:

        猜你喜欢
        • 2016-10-22
        • 2013-09-04
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 2020-02-17
        • 1970-01-01
        • 1970-01-01
        • 2010-10-09
        相关资源
        最近更新 更多