首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cpp中的析构函数是否自动调用?非动态变量是否被删除,即使析构函数没有提到它们?

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

Stack Overflow用户
提问于 2018-01-21 00:52:10
回答 2查看 53关注 0票数 0

根据下面的代码,我会有内存泄漏吗?

代码语言:javascript
复制
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中泄漏内存吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-21 00:55:37

根据我的理解,B类的指针不会出现内存泄漏

你说得对。

但是,我恐怕是因为覆盖默认析构函数行为而导致了一些意外的泄漏。

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

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

从原始的记忆泄漏?不,int不能泄密。int*可以,但不是一个普通的,好的,老的int。其他非指针类型也是如此。不是new编辑、malloced等的东西不会泄漏,也不需要协同响应deletefree

票数 0
EN

Stack Overflow用户

发布于 2018-01-21 00:58:55

不会出现内存泄漏,因为您没有使用new操作符来动态分配内存。相反,它将使用堆栈,在main函数的末尾,它将破坏您的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48362628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档