【发布时间】:2018-06-29 23:10:11
【问题描述】:
鉴于以下代码,我会不会有内存泄漏?
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 因为我的析构函数完全省略了它们?
【问题讨论】:
-
您在
main中发布的内容之外存在问题。如果main这样做{ A a(10,10); A a2 = a; }-- 那么 你会遇到问题,因为析构函数会删除相同的指针两次。 -
我明白,我必须编写一个复制构造函数,但是在我正在处理的项目中,A 类对象只创建一次,所以这不是问题。
-
我正在处理的 A 类对象只创建一次 -- 编译器可以在您不知道已创建副本的情况下进行复制。除非您使用
= delete或进行复制/分配private明确关闭复制,否则您不能保证只复制一份。 -
始终遵循 3/5/0 的规则
-
因此,如果编译器在我不知情的情况下创建了 A 类对象,它会在运行时删除该副本时删除我指向选项卡中 B 对象的所有指针?
标签: c++ class pointers memory-leaks