如果我删除了一个类,它的成员变量是否自动删除?

我一直在研究,没有什么相关的,所以我来到这里。

我试图避免内存泄漏,所以我想知道:

假设我有一个类MyClass带有成员int s ab以及一个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 mcabc所有内容都会被删除? 或者我必须在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?

下一篇: Parsing a binary file. What is a modern way?