我怀疑有这样的,下面是一个班轮用于:
std::vector<X*> vec1 = { new X, new X };
std::vector<X> vec2;
vec2.reserve(vec1.size());
for (auto p : vec1) vec2.push_back(*p);
Run Code Online (Sandbox Code Playgroud)
如果你想确保没有制作副本,那么你可以使用std :: reference_wrapper <>:
std::vector<std::reference_wrapper<X>> vec2;
for (auto p : vec1) vec2.push_back(*p);
Run Code Online (Sandbox Code Playgroud)
但是你必须确保在取消分配vec1元素后才能访问vec2的任何元素.
另一个方法就是使用unique_ptr:
std::vector<std::unique_ptr<X>> vec2;
for (auto p : vec1) vec2.emplace_back(p);
Run Code Online (Sandbox Code Playgroud)
现在你可以放弃vec1,但那么为什么不制作类型的vec1 std::vector<std::unique_ptr<X>>?