64,654
社区成员
发帖
与我相关
我的任务
分享
class A1
{
public:
A1()
{
cout<<"A1\n";
cout<<"A1 end\n";
}
~A1()
{
cout<<"~A1\n";
}
};
class A2
{public:
A2()
{
cout<<"A2\n";
throw(1); //故意的
cout<<"A2 end\n";
}
};
class A
{
public:
A():pA1(new A1),pA2(new A2) //请看这里
{cout<<"a\n";}
~A(){cout<<"~a\n";}
private:
const auto_ptr<A1> pA1;
const auto_ptr<A2> pA2;
};
#include <iostream>
#include <memory>
using namespace std;
class A1
{
public:
A1()
{
cout<<"A1\n";
cout<<"A1 end\n";
}
~A1()
{
cout<<"~A1\n";
}
};
class A2
{
public:
A2()
{
cout<<"A2\n";
throw(1); //故意的
cout<<"A2 end\n";
}
};
class A
{
public:
A():pA1(new A1),pA2(new A2) //请看这里
{
cout<<"a\n";
}
~A()
{
cout<<"~a\n";
}
private:
const auto_ptr<A1> pA1;
const auto_ptr<A2> pA2;
};
int main()
{
try
{
A a1;
}
catch(...)
{
cout<<"异常了"<<endl;
}
cout<<"Hello world"<<endl;
return 0;
}
class A
{
public:
A():pA1(new A1),pA2(new A2) //请看这里
{cout<<"a\n";}
~A(){cout<<"~a\n";}
private:
const auto_ptr<A1> pA1;
const auto_ptr<A2> pA2;
};
如果要强行分析,因为你声明顺序是:
const auto_ptr<A1> pA1;
const auto_ptr<A2> pA2;
所以构造函数列表先初始化pA1,即便初始化pA2抛出异常了,但你的pA1对象已经构造在栈上了,程序结束会自动析构释放指针指向的内存的.