给定以下代码,我会有内存泄漏吗?
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
教育等不会泄漏,不需要delete
或free
的
不会有内存泄漏,因为您没有使用会动态分配内存new
运算符。相反,它将使用堆栈,并且在main
函数结束时,它将破坏您的对象。