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

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;
}

执行结果:

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

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

posted @   小石王  阅读(468)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示