欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c/c++ 重载运算符的思考

程序员文章站 2022-05-23 19:45:17
c/c++ 重载运算符的思考 c++ include using namespace std; class Imaginary{ public: Imaginary():real(0), imag(0){ cout 分析:执行m3 = m1 + m2的时点,因为m3的空间已经创建过了,所以 立即 释 ......

c/c++ 重载运算符的思考

#include <iostream>
using namespace std;

class imaginary{

public:
  imaginary():real(0), imag(0){
    cout << "c:" << this << endl;
  }
  imaginary(int real, int imag):real(real), imag(imag){
    cout << "c:" << this << endl;
  }
  imaginary operator+ (const imaginary &m){
    return imaginary (real + m.real, imag + m.imag);
  }
  ~imaginary(){
    cout << this << endl;
  }
private:
  int real;
  int imag;
};

int main(){
  imaginary m1(10, 20);
  imaginary m2(1, 2);
  imaginary m3;
  printf("m3 : %p\n",&m3);
  m3 = m1 + m2;
  cout << 1 << endl;

  return 0;
}

执行结果:
c/c++ 重载运算符的思考

分析:执行m3 = m1 + m2的时点,因为m3的空间已经创建过了,所以立即释放了operator+中创建的对象,打印了1出来,最后才释放了其余3个对象。

如果代码改成:imaginary m3 = m1 + m2; 因为m3还没有被创建过,所以不释放operator+中创建的对象。