繁体   English   中英

通过删除 C++ 避免 memory 泄漏

[英]Avoid memory leak with delete in C++

我有以下代码:

class A{
    A(){}; 
};

class B{
    A **a; 
    public:
    B(){
        a = new A*[10];
    }
    ~B(){
        delete[] a;
    }
};

int main()
{
    
    B* b1 = new B();
    
    //delete B;
    return 0;
}

我想知道在 main 中动态 object b1 的正确删除是什么? 据我了解,我们不需要在 main 中添加删除,因为 object B 作为指针的动态数组并在返回时调用析构函数。 那正确吗?

我们不需要在 main 中添加删除,因为 object B 作为指针的动态数组并在返回时调用析构函数。 那正确吗?

不,那是错误的。

如果你用new分配一些东西而不用delete释放那个指针,那么分配就会泄漏。

PS B非常不安全,因为它是可复制的,但复制它会导致未定义的行为。

主要动态 object b1 的正确删除是什么?

b1不是动态 object。 它是一个指针,指向一个动态的 object。

管理动态分配的正确方法是不使用裸拥有指针。 此外,应避免不必要的动态分配。 例子:

class B{
    std::vector<A*> a;
public:
    B() : a(10){}
};

int main()
{
    B b;
}

如果使用new创建 object,则需要delete

B* b1 = new B();
...    
delete b1;

或者,您可以使用智能指针,它们会为您调用delete

std::unique_ptr<B> b1( new B );

注意:要使用unique_ptr ,您需要包含<memory>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM