【问题标题】:Is there a workaround to the limitation on pointer arithmetic with smart pointers in C++?是否有解决 C++ 中智能指针对指针运算的限制的解决方法?
【发布时间】:2020-02-23 22:12:57
【问题描述】:

我正在做一个项目,无法使用括号表示法,但必须对数组使用智能指针。但是,正如我发现的那样,智能指针不允许使用指针算术。有解决办法吗?

编辑:该项目是针对一门课程的,在项目规范中它说不能使用括号表示法,并且必须使用智能指针形式的动态分配数组。

【问题讨论】:

  • 您仍然可以在指向T[] 的智能指针上使用operator[]。为什么要指针算术?你想做什么?见:How to Ask/minimal reproducible example
  • 你能更具体地说明你想用指针算术做什么吗?
  • 您可以使用get()(例如std::unique_ptr)访问原始指针并对其进行指针运算。
  • "[...] 指针算术的限制 [...]" 你问的是哪些限制?

标签: c++ smart-pointers pointer-arithmetic


【解决方案1】:

unique_ptr 的特殊化是专门为进行指针运算而发明的。使用“未知大小的数组”作为分配的类型。

例子:

std::unique_ptr<int[]> p(new int[5]);
p[1] = 8;
std::cout << p[1];

为了克服“不能使用括号符号”的人为和毫无意义的限制,请将p[1] 更改为*(p.get()+1)。但首先要确保你正确理解了这个限制——在我看来,没有一个头脑正常的人会要求这样的丑化。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2016-06-17
    • 2021-08-16
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多