gpt4 book ai didi

C++ move 语义 : appending the matrix referenced by a unique_ptr to a vector

转载 作者:行者123 更新时间:2023-11-30 05:03:08 25 4
gpt4 key购买 nike

我有一个 Armadillo unique_ptr 引用的矩阵。我想将此矩阵附加到矩阵 vector ,而不复制基础数据。

到目前为止,我有以下内容:

std::unique_ptr<arma::mat> m = ...; // Assume this is populated somewhere
std::vector<arma::mat> vec;
vec.push_back(std::move(*m));

我认为这将执行以下操作:

  1. 访问底层 arma::mat 对象 (*m)
  2. 使该对象成为右值(std::move)
  3. 将对象附加到 vector 而不复制它(因为它现在是右值)

这是正确的,还是我错过了什么?

谢谢你的帮助!

最佳答案

Is this correct, or did I miss something here?

是的,这是正确的。

有几个缺点。

  1. 在终点m指一个死亡的对象。访问它可能很危险。
  2. arma::mat 类型的对象够重。查看小型 vector 和矩阵的封装本地存储。它禁用小矩阵和 vector 的 move 语义。
  3. 调整 std::vector<arma::mat> 的大小,由于小对象的本地存储相同,因此对其元素进行操作很重要。

我更喜欢下面这样的代码

std::unique_ptr<arma::mat> m = ...; // Assume this is populated somewhere
std::vector<std::unique_ptr<arma::mat>> vec;
vec.push_back(std::move(m));

关于C++ move 语义 : appending the matrix referenced by a unique_ptr to a vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49575526/

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