Visual c++ 2010 / QT:为什么要调用类的赋值操作符

Visual C++ 2010 / QT : Why assignment operator of the class was called?

本文关键字:调用 赋值操作符 为什么 c++ 2010 QT Visual      更新时间:2023-10-16

我正在研究一个由前同事编写的ApxTrace类

外部类将调用copyTrace()公共成员函数来复制ApxTrace类。ApxTrace类包含QVector数据成员

代码如下:

void ApxTrace::copyTrace(ApxTrace& trace)
{
    *this = trace;
}

然而,它给出了未处理的异常(QTCored4.dll):访问违反写入位置0xfeeeefeee在软件的调试版本。有趣的是,代码在软件的发布版本中运行良好。

callStack显示ApxTrace::operator=(const APxTrace &_that)被调用,但是ApxTrace类不支持赋值操作符

请建议:

  1. 为什么在这种情况下调用赋值操作符?
  2. 对上面的CopyTrace()有何评论?我知道这里不处理self赋值。
  3. 为什么在软件的发布版本中运行良好?

1。为什么在这种情况下调用赋值操作符?

因为它在

函数体中显式调用
*this = trace;

如果没有显式定义,则编译器隐式定义,前提是它没有被编译器删除。

对于第三个问题,那么程序可能有未定义的行为