gpt4 book ai didi

c++ - vector 的唯一拷贝

转载 作者:可可西里 更新时间:2023-11-01 18:26:18 33 4
gpt4 key购买 nike

我有一个包含 vector<unique_ptr> 的类对象.我想要这个对象的拷贝来运行非常量函数。原始拷贝必须保持 const

这样一个类的复制构造函数是什么样的?

class Foo{
public:
Foo(const Foo& other): ??? {}

std::vector<std::unique_ptr> ptrs;
};

最佳答案

您不能简单地复制 std::vector<std::unique_ptr>因为std::unique_ptr不可复制,因此它将删除 vector 复制构造函数。

如果您不更改存储在 vector 中的类型,那么您可以通过创建一个全新的 vector 来进行“复制”

std::vector<std::unique_ptr<some_type>> from; // this has the data to copy
std::vector<std::unique_ptr<some_type>> to;
to.reserve(from.size()) // preallocate the space we need so push_back doesn't have to

for (const auto& e : from)
to.push_back(std::make_unique<some_type>(*e));

现在tofrom 的单独拷贝并且可以独立更改。


另外:如果你的类型是多态的,上面的方法将不起作用,因为你会有一个指向基类的指针。你需要做的是创建一个虚拟的 clone成员函数并有 clone返回 std::unique_ptr到实际派生对象的拷贝。这将使代码看起来像:

std::vector<std::unique_ptr<some_type>> from; // this has the data to copy
std::vector<std::unique_ptr<some_type>> to;
to.reserve(from.size()) // preallocate the space we need so push_back doesn't have to

for (const auto& e : from)
to.push_back(e->clone());

关于c++ - vector<unique_ptr> 的唯一拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797849/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com