C++带参数的构造函数多次初始化之怪现象

来源:互联网 发布:怎样躲避公司网络监控 编辑:程序博客网 时间:2024/06/08 06:50

  昨天晚上由于无聊,突然想写一个字符串类练练手。当写到用wchar_t * 初始化字符串的构造函数时,突发奇想,如果同一字符串类两次用不同的wchar_t * 进行初始化(第一次是初始化,第二次应该是赋值,只是该类不存在重载赋值运算符,故而会再次调用带wchar_t * 参数的构造函数)会发生什么情况,于是操起VS2010演示起来,废话不多说,看程序。

 

  程序执行结果是什么都没有。开始以为只是因为带wchar_t * 参数的构造函数没有delete内部堆指针造成的内存泄露,但是通过调试发现并不完全是那么回事。刚开始第一次初始化czString时一切正常,到第二次赋值时,调试器跟进了构造函数内部,此时发现监视的成员变量m_ulCharArrayLength的值为很大的数,并且m_pOriginalCharArray的指针也为无效指针,于是初步判定可能是正在构造一个临时对象,紧接着用“第二次赋值”字符串初始化了临时对象。但奇怪的是,当临时对象初始化完毕之后,紧跟着czString对象就调用了析构函数,从而将其内部的字符串析构掉了。于是printf什么都不出现了。这种现象的原因目前还没有弄清楚,贴出来是希望大家一起讨论一下,看看有哪位高人能够指点一二。

 

原创粉丝点击