cpp 中的析构函数是否自动调用?即使析构函数没有提及非动态变量,它们也会被删除吗?



给定以下代码,我会有内存泄漏吗?

class B {
    int x;
}
class A {
    int x;
    int y;
    B* tab[10];
    A(int x, int y){
        this->x = x;
        this->y = y;
        for (int i = 0; i < 10; i++){
            tab[i] = new B;
        }            
    }
    ~A(){
        for (int i = 0; i < 10; i++){
            delete tab[i];
        }
    }
int main(){
    A a(10, 10);
    return 0;
}

在我的理解中,从指向 B 类的指针不会有内存泄漏,但我担心我通过覆盖默认析构函数行为会导致一些意外泄漏,难道不会有来自 int x 和 int y 的内存泄漏,因为我的析构函数完全省略了它们?

在我的理解中,指向B类的指针不会有内存泄漏

你在这里是对的。

但我担心我通过覆盖默认析构函数行为导致一些意外泄漏

你不应该害怕。默认析构函数不能很好地处理指针。您的实现很好。

不能有来自 int x 和 int y 的内存泄漏,因为我的析构函数完全省略了它们吗?

原语的内存泄漏?不,int不能泄漏。 int*可以,但不是普通的、好的、古老的int.其他非指针类型也是如此。不是new的东西,malloc教育等不会泄漏,不需要deletefree

对应

不会有内存泄漏,因为您没有使用会动态分配内存new运算符。相反,它将使用堆栈,并且在main函数结束时,它将破坏您的对象。

相关内容

最新更新