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