【问题标题】:Can we keep char[undetermined_during_compile_time_size] inside of boost::shared_ptr?我们可以将 char[undetermined_during_compile_time_size] 保留在 boost::shared_ptr 中吗?
【发布时间】:2011-08-24 13:24:09
【问题描述】:

我可以有一个queue<char*> file_queue;,但我需要在每个char* 之后进行清理。我有一个动态变量int buff_length;,它是file_queue 中每个字符的长度。它会在queue 创建之前从config 文件中设置一次。所以我想知道 - 是否可以将 char[buff_length] 保留在一个 boost::shared_ptr 中以及如何做这样的事情?

【问题讨论】:

    标签: c++ pointers boost char shared-ptr


    【解决方案1】:

    使用 boost::shared_array<..>,有关文档,请参阅 here

    【讨论】:

      【解决方案2】:

      您可以使用shared_array

      boost::shared_array<char> ptr(new char[buff_length]);
      

      std::stringstd::vector&lt;char&gt; 有什么理由不适合您的情况?


      注意,对于 C++11,您可以使用以下内容:

      std::unique_ptr<char[]> ptr(new char[buff_length]);
      

      std::unique_ptr 专门处理数组。我错误地认为boost::shared_ptr 也这样做了,但显然这是不正确的。

      【讨论】:

      • “具有部分专业化以正确处理数组。” boost::shared_ptr?我不相信是这样的。这就是为什么有boost::shared_array。 (请注意,std::shared_ptr 确实具有该专业化)
      • shared_array 不是 new []delete [] 的正确解决方案
      • 我要补充一点,您可能不应该这样做,因为除非您从不更改数组,否则无法知道数组的大小,在这种情况下,编译时常量会更好。您可能应该使用std::pair 或其他东西,这样数组也可以携带它的长度。
      • 你能指出这个事实的文档吗?我没找到。
      • 抱歉,我以为它有专业,但我错了。我已经更正了我的答案。 std::unique_ptr 具有专业化。
      猜你喜欢
      • 2016-03-15
      • 2021-07-25
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多