You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ OOP疑问:向vector中添加的是否都是名为temp的对象?

关于vector推入局部对象的疑问解答

你的理解完全不对,vector里的每个元素都是独立的Movie对象副本,并不是同一个名为'temp'的对象。

具体解释:

  • 每次进入case 1的代码块时,都会创建一个全新的局部Movie temp对象。这个对象的生命周期只限于当前代码块(case 1后的大括号范围),代码块执行完毕后,这个temp就会被销毁。
  • my_movies.push_back(temp)执行的是复制操作:它会把当前temp对象的所有成员数据(也就是你用set_name设置的电影名)完整复制一份,再把这个副本添加到vector的末尾。
  • 下一次进入case 1时,会生成一个全新的temp对象,和之前的temp没有任何关联。给新temp设置新电影名后再复制进vector,此时vector里就有了两个独立的Movie对象,各自保存着不同的电影名。

举个实际执行的例子:

  1. 第一次选1,输入"阿凡达",temp的name是"阿凡达",push_back后vector里有一个存着"阿凡达"的Movie对象副本。
  2. 第二次选1,输入"泰坦尼克号",新temp的name是"泰坦尼克号",push_back后vector里有两个独立对象,分别存着这两个名字。

补充代码里的小问题:

你的case 2中直接写cout << mv << endl;会编译报错,因为C++默认不知道如何输出Movie对象。可以改成调用get_name()方法来输出:

for (auto &mv : my_movies)
    cout << mv.get_name() << endl;

内容的提问来源于stack exchange,提问作者Chavon4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:18:27