wlo*_*14a 0 c++ push-back unique-ptr
所以我认为向 vector 添加 unique 不应该起作用。为什么它适用于以下代码?是不是因为没有将复制 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这里没有副本,只有移动。
在这种情况下,make_unique 将生成一个未命名的唯一指针实例,并且此 push_back 将其视为一个 r 值引用,它可以根据需要使用。
它产生的结果与此代码几乎相同:
std::vector<std::unique_ptr<Test>> tests;
auto ptr = std::make_unique<Test>();
tests.push_back(std::move(ptr));
Run Code Online (Sandbox Code Playgroud)
如果您想搜索有关此问题的更多信息,这称为移动语义。(这仅适用于 c++11 及更高版本)