【问题标题】:no match for ‘operator[]’ (operand types are ‘std::unique_ptr<std::vector<int> >’ and ‘int’) [duplicate]'operator[]' 不匹配(操作数类型为'std::unique_ptr<std::vector<int> >' 和'int')[重复]
【发布时间】:2018-05-04 12:42:47
【问题描述】:

我有一个std::unique_ptr&lt;std::vector&lt;int&gt;&gt;,我正在尝试使用[] 运算符访问一个元素。如何访问 std::unique_ptr 中包含的向量的特定索引?

#include <memory>
#include <vector>

int main()
{
    std::unique_ptr<std::vector<int>> x;
    x[0] = 1;
}

谢谢

【问题讨论】:

  • 存储动态分配的std::vector 的目的是什么?你有这个要求吗?
  • 你有一个指向向量的指针,但它没有指向任何地方
  • 至于你的问题,你还会怀疑是不是简单的非智能指针?喜欢std::vector&lt;int&gt;* x;?智能指针的行为仍然像一个指针。
  • unique_ptr 上有一个自定义删除器,因此一旦超出范围,它会将内存清空为 0xFF。我没有把它包括在内,因为我认为它不相关。
  • 我们正在对不执行任何自动消隐的嵌入式处理器进行编程。我们将用于解密等的对称密钥等数据置空。

标签: c++ vector std smart-pointers


【解决方案1】:

你有一个指向向量的指针,所以你必须取消引用它

(*x)[0] = 1;

x->at(0) = 1;

不过,我很好奇,为什么需要动态分配std::vector?该容器已经动态分配了底层数组,所以我只需将x 直接设为std::vector&lt;int&gt;

如果您确实保留一个指向向量的指针,至少要确保在使用它之前分配对象

auto x = std::make_unique<std::vector<int>>();

【讨论】:

  • 谢谢!用 * 推迟就可以了。我错误地使用 .get() 而不是 *.
猜你喜欢
  • 2020-11-29
  • 1970-01-01
  • 2020-07-01
  • 2023-04-09
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 2020-12-12
相关资源
最近更新 更多