【发布时间】:2011-03-31 04:55:33
【问题描述】:
有没有办法破坏一个结构(不是一个类)?
【问题讨论】:
-
可怕的问题,更大的图景是什么?你通常要么根本不这样做(它是一个自动变量),要么你在它上面调用
delete(它是动态分配的。最好不必明确地这样做。)在任何其他情况下,结构都是类。
标签: c++ destructor
有没有办法破坏一个结构(不是一个类)?
【问题讨论】:
delete(它是动态分配的。最好不必明确地这样做。)在任何其他情况下,结构都是类。
标签: c++ destructor
在 C++ 中,struct 与 class 完全相同,但成员和基的默认可见性除外。因此,如果有办法“破坏”一个类,您可以使用完全相同的方式“破坏”一个结构。
所以,如果你的 C++ 程序中有 struct s { },你可以这样做:
s *v = new s();
delete v; // will call structure's destructor.
【讨论】:
new 创建了对象,则使用delete 将其销毁,或者,如果您够聪明,可以将其分配给智能指针来为您处理。如果您自动创建了对象,您就会让它自动超出范围。如果你调用了placement new 的原始力量来从原始位伪造对象,那么你调用析构函数将它扔回它来自的深渊——但通常你不想这样做。
struct 中有newed 指针怎么办?那么当你delete你的struct时,那会是delete吗?
除了默认的访问说明符(“private”用于类,“public”用于结构)之外,C++ 类和结构中的其他所有内容都相同。所以,是的,你可以像在类中一样在 struct 中编写和使用析构函数。
【讨论】:
结构与类相同,只是默认可见性和继承是公共的(而不是私有的)。
因此您可以像这样创建和销毁结构(与类相同,或内置类型):
// 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;
【讨论】:
结构和类是相同的东西,只是由于两者之间的概念差异而发生技术差异(访问的默认字段)。然而,像类这样的每个结构都在必须创建对象时调用其构造函数,并在其可见性字段结束时调用其析构函数。
在 C++ 中,结构的功能不亚于类。
【讨论】: