c++这段代码没看懂 ?

=========================

17 CTyre 析构函数
17 CTyre 析构函数

为什么会打印这两行 ???

阅读 1.2k
1 个回答

car.GetCTyre() 返回了一个临时的 CTyre 对象,在你输出完成后,这个对象就会被自动释放,你输出了 Radius 和 Width,所以生成了两个临时对象,就会释放了两次。

cout << car.getCTyre().getRadius() << endl;

等价于

{
    CTyre tmpCTyre;
    tmpCTyre = car.getCTyre();
    cout << tmpCTyre.getRadius() << endl;
}    // 在这里 tmpCTyre 就会被自动释放掉了

而你上面的那种写法,隐含的、临时的 CTyre 什么时候释放由编译器来决定,你的这个程序编译器决定在你的两个 cout 输出后一起释放。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题