c++ - 我如何将 boost::array 转换为 boost::shared_ptr

标签 c++ arrays boost shared-ptr

boost::array<uint8_t,1000> buffer;
ByteBuffer b((boost::shared_ptr<uint8_t>)buffer.data(), buffer.size());

好吧,转换有点有效,但是当调试器转到方法的末尾时,它给我一个错误,所以我想知道是否有另一种方法来转换/转换它以使其有效!

最佳答案

这毫无意义。您正试图通过应用任意强制转换来“破解”错误。

shared_ptr 是一个指向动态分配对象的指针的包装器。它管理它们的动态生命周期。

array 是一个数组的包装器,具有自动存储持续时间。它包装的 uint8_t 数组不是动态分配的内存块。

因此,这种转换是完全不合适的,并且会导致未定义的行为...即使您可以编译它也是如此。通常,使用像 static_cast 这样的 C++ 强制转换,它会以 C 强制转换不会出现的方式在不正确的转换中出错。

(使用 C 类型转换以使其“正常工作”是很诱人的,但实际上您通常做的是将头埋在沙子里并唱“啊哈”,而您的代码却崩溃成废话。)

为什么不只是:

ByteBuffer b(buffer.data(), buffer.size());

如果 ByteBuffer 确实需要一个 shared_ptr 作为输入,那么您将不得不将数据存储在一个 shared_ptr 控制的动态 内存块开始,或将其复制到此操作中。

关于c++ - 我如何将 boost::array 转换为 boost::shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6291639/

相关文章:

c++ - 为什么打印一个变量会改变它的值?

c++ - 所有文件的 mime 类型是什么

c++ - 在不使用自旋锁的情况下在空队列上暂停线程

java - 双端队列在前面插入并从后面移除

c++ - 如何 boost::fusion::for_each 添加类型以创建类型的 mpl::vector?

c++ - try/catch block 失败并且应用程序崩溃

javascript - 如何从数组中删除 endDate 属性高于当前所选月份的员工?

arrays - Ruby Array of Arrays 按值分组和计数

c++ - boost 互斥锁的作用域解锁

c++ - 在 Python 中使用 Boost 图形库