【问题标题】:Boost shared_ptr to array, getting size将 shared_ptr 提升到数组,获取大小
【发布时间】:2014-08-11 00:12:58
【问题描述】:

好的,我是这种方法的新手,所以它可能是错误的。但基本上我想有一个shared_ptr 到一个数组。使用 Boost 1.53+,似乎没有必要使用make_shared_array。无论如何,我什至不想分配它——而是从一个指针和一个大小创建它,然后让它被管理。

所以:

// I have a (char* p) to the array, and a (size_t sz) specifying the length of it

// shall I create a shared_ptr like this...
boost::shared_ptr<char[]> sp(p, sz); // is this even right?

// now, how can I get the size of the structure? (assuming sz is out of scope)

它丢失了吗?然后我是否应该将所有内容包装在另一个也记住存储数组大小的类中?

【问题讨论】:

  • 为什么不使用boost::array&lt;char, sz&gt;
  • 假设我没有控制权,我只是得到它的 char* 和 size_t ......还是你建议从指针创建 boost::array 容器?
  • 正如您的示例所暗示的,您需要一个chars 数组,如果您事先知道缓冲区的大小或使用@,为什么还要创建shared_ptr 而不仅仅是使用boost::array 987654328@ 或 std::vector 如果您需要动态数组(即,大小在运行时指定)。
  • 假设我从我无法控制的代码中获取指向缓​​冲区的指针及其大小,即用 C 实现的解压缩库。我希望这个特定的方法使 shared_ptr缓冲区以在创建它的对象到期后使其可用于其他对象。但是分配内存的原始代码是那个解压库。
  • 然后像这样使用shared_ptr 你有一个严重的问题。如果缓冲区是在 C 中分配的(我假设使用 malloc),那么 shared_ptr 需要一个自定义删除器。一般来说,用你自己没有分配的内存来初始化智能指针并不是一个好主意。

标签: c++ arrays boost shared-ptr


【解决方案1】:

你可以这样做:

boost::shared_ptr<char[]> sp(new char[100]);

但您需要手动跟踪大小(在本例中为 100)。

【讨论】:

  • 好的,假设我没有创建数组。已经分配好了。
  • 我猜你是在建议我首先想到的解决方案,将它包装到一个照顾大小的类中......
猜你喜欢
  • 2013-06-16
  • 2010-10-28
  • 2023-03-03
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多