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,输入"阿凡达",temp的name是"阿凡达",push_back后vector里有一个存着"阿凡达"的Movie对象副本。
- 第二次选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
相关产品推荐
相关产品推荐

