类中成员变量定义的顺序会有什么影响?
应该是没有,平时谁会去注意下面代码中m_xxx, m_yyy的先后次序呢?
class CXxx;
class CYyy;
class CZzz;
{
...
private:
CXxx m_xxx;
CYyy m_yyy;
}
其实是有区别的,就是定义顺序造成析构顺序不同。
本例就是实际DEBUG过程中发现的析构顺序造成的错误。(VC环境)
代码中m_yyy的析构早于m_xxx(与构造顺序相反),
若m_xxx保存了m_yyy的一个指针m_pY, 并在析构过程中引用该指针就会有意外。
CXxxx::~CXxxx()
{
m_pY->MethodOfYyy();
}
m_pY所指向的对象已经析构,虽然调用一般不会报错,但结果错误的。
m_yyy析构以后的简单成员变量会保持原值,但如std::string这样的复杂变量已清空。
解决方法:
改变定义顺序虽可消除错误,其实应该改变流程,使析构顺序与行为无关。
如不要在析构方法中引用可能已无效的指针,可改为显示调用。
Debug心得:
实际代码远非如此简单,指针的传递层次较多。现象为一个string无故变空。
不知道如何设置断点,所有赋值语句都禁掉还是自动变化。
VC的数据断点也不灵。
在错误无法定位时,首先要设法使错误容易复现。
通过缩小测试数据的规模,只保留使错误重现的最小数据集,然后再跟踪调试。
测试数据缩小后,仅跟踪执行了几次就发现变量改变的点在析构函数上。
分享到:
相关推荐
uml 用例图 顺序图 协作图可以更好的被描述
课注册系统 UML 用例图 顺序图 协作图 用例说明
脚本组件应用一例(文本顺序取反).rar
完整版脚本组件应用一例(文本顺序取反).rar
脚本组件应用一例(文本顺序取反).e.rar
完整版脚本组件应用一例(文本顺序取反).e.rar
这是一个详细的智能课表的描述,包括用例图、用例分析、顺序图、之后会补充活动图
VC++\文件加密技术一例文件加密技术一例VC++\文件加密技术一例VC++\文件加密技术一例
一例重症肺炎的个案护理.docx
ATM取款机 UML活动图 时序图 顺序图 用例图 类图 ATM取款机 UML活动图 时序图 顺序图 用例图 类图 ATM取款机 UML活动图 时序图 顺序图 用例图 类图 ATM取款机 UML活动图 时序图 顺序图 用例图 类图 ATM取款机 UML...
UML 介绍UML建模,用例图、顺序图等的画法,及案例。
在标识出系统的类图之后,仅给出了实现用例的组成结构,这时还需要描述这些类的对象是如何交互来实现用例功能的。即不但需要把用例图模型转化为类图模型,还要将它转化为交互图模型。
各类 UML 建模的图 用例图,顺序图,包图,类图,活动图各类 UML 建模的图 用例图,顺序图,包图,类图,活动图
蚂蚁算法一例。感觉还可以。matlab的。
php实用验证码一例 php实用验证码一例 php实用验证码一例
EMC symmetric存储BCV Split简单错误一例.docx
计算机一级WPS辅导:WPS2003排版位置错误一例.docx
编写一个程序,实现顺序表的各种基本运算,并在此基础上完成以下功能: 1) 初始化顺序表; 2) 依次采用尾插入法插入a,b,c,d,e元素; 3) 输出顺序表L; 4) 输出顺序表L的长度; 5) 判断顺序表L是否为空; 6) 输出顺序...
C# 使用错误提示功能 一例 类似WEB中的表单判断一样,当输入的字符不符要求时会弹出错误提示,要求用户更正,因为这种功能相对较简单,所以经常被忽视,以至于一些C#新手朋友并不知道如何使用这一功能,你可参考一下...
自动饮料售货机(活动图、用例图、顺序图)