1.遇到的问题
1.1 在这里首先遇到了变量的生命周期问题。我记得曾经有个错误是Excel不能连续导出两次,是因为我的一个对象的成员变量没有清空
一个类的成员变量一定要在这个对象销毁的时候才会做清空。我却把清空数据的东西放到了析构函数中,从而早成了错误。
CExcelText::~CExcelText()//析构函数
{
CloseXls();
}
其实解决这个问题,
1. 要么使用 new,比如 CExcelText* p = new CExcelText;
2. 要么定义成局部的对象,当函数结束的时候自动销毁
3.要么不要自己动手清理,不要放入到析构函数中去。
-
- 对于全域对象(如本例之GlobalObject),程序一开始,其构造式就先被执行
(比程序进入点更早);程序即将结束前其析构式被执行。MFC 程序就有这
样一个全域对象,通常以application object 称呼。 - 对于区域对象,当对象诞生时,其构造式被执行;当程序流程将离开该对象的
存活范围(以至于对象将毁灭),其析构式被执行。 - 对于静态(static)对象,当对象诞生时其构造式被执行;当程序将结束时(此
对象因而将遭致毁灭)其析构式才被执行,但比全域对象的析构式早一步执
行。 - 对于以new 方式产生出来的区域对象,当对象诞生时其构造式被执行。析构
式则在对象被delete 时执行
- 对于全域对象(如本例之GlobalObject),程序一开始,其构造式就先被执行
1.2 在这里学会了如何处理异常和重新分配内存的操作。
分配内存的操作:
如果分配的不够的话,怎么从新分配:
我采用了,异常处理的方式
在catch中,重新分配,然后使用goto语句解决