65,211
社区成员
发帖
与我相关
我的任务
分享
int main()
{
A <int> a(1);//哥们A是类 不是摸版定义就错了 A a(1);这样调用构造函数和析构啊
B <int> b(1); //同上
return 0;
}
#include <iostream>
using namespace std;
class A
{
private:
int *a3;
public:
A():a3(NULL)
{
cout <<"A()" <<endl;
}
A(int x)
{
cout <<"A(x)" <<endl;
a3= new int[x];
}
virtual ~A()
{
if (NULL!=a3) delete []a3;
cout <<"析构函数A" <<endl;
}
};
class B:public A
{
public:
B()
{
cout <<"B()" <<endl;
};
B(int x):A(x)
{
cout <<"B(x)" <<endl;
}
virtual ~B()
{
cout <<"析构函数B" <<endl;
}
};
int main()
{
A a(1);
B b(1);
return 0;
}
B b(1);//这时编译器会调用b的父类子对象的默认构造函数A(),但是A()没有初始化A的成员a3,a3是野指针,当退出main时,析构b后编译器会自动调用b的父类子对象的析构函数~A(),此时delete一个野指针a3,所以报错