如果我删除了一个类,它的成员变量是否自动删除?
我一直在研究,没有什么相关的,所以我来到这里。
我试图避免内存泄漏,所以我想知道:
假设我有一个类MyClass
带有成员int
s a
和b
以及一个int array c
,它们被填充到一个成员函数中:
class MyClass
{
public:
int a, b;
int c[2];
void setVariables()
{
a, b = 0;
for (int i = 0; i < 2; i++)
{
c[i] = 3;
}
}
};
int main(int argc, char* argv[])
{
MyClass* mc = new MyClass();
mc->setVariables();
delete mc;
}
现在,在我调用delete mc
, a
, b
和c
所有内容都会被删除? 或者我必须在MyClass
的析构函数中明确地做到这一点?
当执行delete mc
,编译器调用对象的析构函数( MyClass::~MyClass()
),然后释放与其关联的内存。
默认的析构函数(当你没有声明你自己的时候)调用所有成员变量的析构函数,按从头到尾的顺序声明(也就是在这种情况下, c
,然后b
,然后a
)。 由于这个例子中的成员是POD类型(他们没有析构函数),所以没有工作完成。
规则非常简单:用new
创建的每个对象都必须用delete
一次; 用new[]
创建的每个数组必须用delete[]
正好销毁一次; 一切都不能删除。 所以你的代码是正确的。 您在使用new
创建后删除mc
,而不是删除未使用new
创建的成员。
当程序流程变得复杂时(特别是涉及异常时),应用规则可能非常棘手; 因此,最好不要自己删除对象,而要立即使用new
的结果初始化一个智能指针来为您管理对象。
类中的变量具有类作用域,并在类被破坏时被破坏。 唯一需要担心的是指针 - 这些需要在析构函数中适当地解决。
链接地址: http://www.djcxy.com/p/40311.html上一篇: If I delete a class, are its member variables automatically deleted?