car.GetCTyre() 返回了一个临时的 CTyre 对象,在你输出完成后,这个对象就会被自动释放,你输出了 Radius 和 Width,所以生成了两个临时对象,就会释放了两次。cout << car.getCTyre().getRadius() << endl;等价于{ CTyre tmpCTyre; tmpCTyre = car.getCTyre(); cout << tmpCTyre.getRadius() << endl; } // 在这里 tmpCTyre 就会被自动释放掉了而你上面的那种写法,隐含的、临时的 CTyre 什么时候释放由编译器来决定,你的这个程序编译器决定在你的两个 cout 输出后一起释放。
car.GetCTyre() 返回了一个临时的 CTyre 对象,在你输出完成后,这个对象就会被自动释放,你输出了 Radius 和 Width,所以生成了两个临时对象,就会释放了两次。
等价于
而你上面的那种写法,隐含的、临时的 CTyre 什么时候释放由编译器来决定,你的这个程序编译器决定在你的两个 cout 输出后一起释放。