c++ - 为什么这段代码允许 push_back unique_ptr 做向量?
问题描述
所以我认为向矢量添加独特的东西是行不通的。为什么它适用于以下代码?是不是因为没有将复制 ctor 设置为“已删除”?
#include <iostream>
#include <vector>
#include <memory>
class Test
{
public:
int i = 5;
};
int main()
{
std::vector<std::unique_ptr<Test>> tests;
tests.push_back(std::make_unique<Test>());
for (auto &test : tests)
{
std::cout << test->i << std::endl;
}
for (auto &test : tests)
{
std::cout << test->i << std::endl;
}
}
解决方案
这里没有副本,只有移动。
在这种情况下,make_unique 将生成一个未命名的唯一指针实例,并且此 push_back 将其视为 r 值引用,它可以随意使用它。
它产生的结果与此代码几乎相同:
std::vector<std::unique_ptr<Test>> tests;
auto ptr = std::make_unique<Test>();
tests.push_back(std::move(ptr));
如果您想搜索有关此事的更多信息,这称为移动语义。(这仅适用于 c++11 及更高版本)
推荐阅读
- gatsby - gatsby-image:设置图像处理管道
- java - 如何将源类型转换器转换为房间
- node.js - 通过 tcp 请求打开远程服务器上的终端/shell
- unix - unix 查找和 cp 前 n 个匹配模式的文件
- graphene-django - 从抽象超类继承的模型的石墨烯节点
- reactive-programming - 为什么在切换映射无限流时未触发 onComplete
- javascript - 在特定天数范围内,事件不会被渲染
- python - python - 为什么在使用一行列表声明(this:a = b = c = [])时python会追加到所有列表而不是一个?
- html - 响应式切换不起作用,可能是拼写问题,但我找不到我的错误
- python - 数据框中的时区转换