【问题标题】:Boost Shared Pointer array提升共享指针数组
【发布时间】:2015-04-23 10:49:54
【问题描述】:

我是 boost 新手,我遇到了 boost 指针。

float *value = new float[9]; 
value[0] = 5; ...

以上是我最初的c++代码。

我将上面的内容转换为提升共享指针

boost::shared_ptr<float> value (new float);

但是当我尝试添加值时,它给了我错误,我不能使用 operator[]。

我想这太基本了,但我能得到一些关于如何向 boost 指针指向的内存添加值的信息。

【问题讨论】:

  • @iharob 为什么幸运?
  • 提升丑陋?它是最受尊敬的 C++ 库之一。 Boost 中的许多东西都进入了标准(例如 shared_ptr),这就是 C++ 社区的权威级别。 Spirit EBNF 语法解析库简直太棒了。
  • 这很糟糕,原因有两个。 C++ 现在有一个标准共享点,std::shared_ptr,所以你应该使用它而不是提升产品。此外,除非您有其他重要原因,否则您应该 std::vectorstd::array 处理“类似数组”的内容。
  • @Bathsheba:这是对权威的诉求。 Boost 的废话和其他任何地方一样多——有时甚至更多。找到进入标准的途径并不是质量的标志 - 请参阅 std::asyncstd::futurestd::threadstd::vector&lt;bool&gt;u8 文字等等。

标签: c++ pointers boost


【解决方案1】:

boost::shared_ptr&lt;&gt; 并非设计用于保存“衰减”为指针的数组。

对于初学者,它不会delete 正确销毁内存(它会调用delete 而不是delete[]。)您必须构建自己的释放器来规避这个问题。可能但很乏味。

保持简单:使用std::vector&lt;float&gt;。在当前标准中,保证底层数据是连续的,可以使用data()提取底层数组。

【讨论】:

  • 谢谢 我终于明白我收到错误消息的原因了。除此之外,正如您提到的 std::vector。如果我改用 float value[9] = {} 来分配内存,你认为这很好吗?
猜你喜欢
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 2012-10-19
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
相关资源
最近更新 更多