gpt4 book ai didi

c++ - 在容器之间 move 对象而无需复制开销

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:43 25 4
gpt4 key购买 nike

我有一个对象指针的全局 vector ,我正在生成相同类型的对象并将它们放入 forloop 内的 vector 中。即:

vector<object * > ptrVector;
vector<object > objVector;

for ( ; ;)
{
getElements(objVector);
calcualte_with(objVector);
objVector.clear();
}

我的问题是如何在不复制开销的情况下将 objVector 中的对象“move ”到 ptrVector 中?

最佳答案

简而言之,您不能使用 C++98/C++03。 objVector 中的对象由 objVector 分配和拥有,当您销毁或清除它时,项目也将被销毁。

使用 C++11,您可以为您的对象实现 move 构造函数,并使用从 objVector 中的对象 move 构造的新对象填充 ptrVector。通常, move 构造函数将对象的私有(private)成员 move 过来,避免复制对象拥有的任何大型堆分配数据结构,这通常非常便宜。

为此,您需要使用类似 std::transform(begin(objVector), end(objVector), std::back_inserter(ptrVector), [](object& o){return new object(std::move(o);}) 的东西

但是,我建议将 ptrVector 设置为 std::vector<std::unique_ptr<object>>std::vector<std::shared_ptr<object>>如果 ptrVector 而不是使用原始指针分别对其所指向的对象拥有独占或共享的所有权。

关于c++ - 在容器之间 move 对象而无需复制开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242878/

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