我正在使用前同事编写的ApxTrace类Visual C++ 2010/QT:为什么类的赋值操作符被调用?
外部类将调用copyTrace()
公共成员函数来复制ApxTrace类。 ApxTrace类包含QVector
数据成员
下面是代码:
void ApxTrace::copyTrace(ApxTrace& trace)
{
*this = trace;
}
但是它给了未处理的异常(QTCored4.dll):访问冲突写入位置在软件的调试版本0xfeeeefeee。有趣的是,要注意的是代码在软件的发行版中运行良好。
调用堆栈显示ApxTrace::operator=(const APxTrace &_that)
被调用,但是,ApxTrace类不支持赋值运算符。
请咨询:
- 为什么赋值运算符被称为在这种情况下?
- 评论上面的
CopyTrace()
?我知道自我分配不在这里处理。 - 为什么它在软件的发行版的工作呢?
嗯,你的函数分配'trace'到'* this'。如果没有调用赋值操作符,你期望发生什么? –
至于Q3,你的代码可能已经某处未定义行为,编译器帮忙,在你的调试版本检查你。未定义的行为包括似乎工作,崩溃或[让你怀孕](http://stackoverflow.com/a/1553407/2756719)。 –
要回答“为什么它在软件的发布版本中运行良好”,答案是错误软件的行为不可预测。修复这个错误,这个谜将消失。 –