Visual c++ 2010 / QT:为什么要调用类的赋值操作符
Visual C++ 2010 / QT : Why assignment operator of the class was called?
我正在研究一个由前同事编写的ApxTrace类
外部类将调用copyTrace()
公共成员函数来复制ApxTrace类。ApxTrace类包含QVector
数据成员
代码如下:
void ApxTrace::copyTrace(ApxTrace& trace)
{
*this = trace;
}
然而,它给出了未处理的异常(QTCored4.dll):访问违反写入位置0xfeeeefeee在软件的调试版本。有趣的是,代码在软件的发布版本中运行良好。
callStack显示ApxTrace::operator=(const APxTrace &_that)
被调用,但是ApxTrace类不支持赋值操作符
请建议:
- 为什么在这种情况下调用赋值操作符?
- 对上面的
CopyTrace()
有何评论?我知道这里不处理self赋值。 - 为什么在软件的发布版本中运行良好?
1。为什么在这种情况下调用赋值操作符?
因为它在
函数体中显式调用*this = trace;
如果没有显式定义,则编译器隐式定义,前提是它没有被编译器删除。
对于第三个问题,那么程序可能有未定义的行为
相关文章:
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 为什么deque::erase()调用赋值运算符
- C++ 不调用赋值运算符
- 通过调用Move赋值操作符实现Move构造函数
- 如何从复制赋值操作符调用复制构造函数
- 即使类没有定义构造函数,也不能在类上调用c++默认的move赋值操作符
- 复制构造函数和赋值操作符都被调用
- 可以在move赋值操作符中调用析构函数吗?
- 在c++中使用赋值操作符而不是调用函数
- 赋值操作符重载未被调用
- Visual c++ 2010 / QT:为什么要调用类的赋值操作符
- 为什么赋值操作符用于深度复制,谁调用它
- 如果在调用时没有取赋值操作符的返回类型,将会发生什么?
- 在重载赋值操作符内调用构造函数
- 退出重载赋值操作符将调用析构函数来删除对象
- C++从重载的复制赋值运算符中调用默认的复制赋值操作符
- 在赋值操作符中调用复制构造函数
- 当我从赋值操作符返回值时,首先,调用复制构造函数的机制和基础是什么?
- c++赋值操作符=不调用rhs上的析构函数