boost::array<uint8_t,1000> buffer;
ByteBuffer b((boost::shared_ptr<uint8_t>)buffer.data(), buffer.size());
好吧,演员有点工作,但是当调试器到达方法的末尾时它会给我一个错误,所以我想知道是否有另一种方法来转换/转换它以使其工作!
答案 0 :(得分:3)
这没有任何意义。您试图通过应用任意强制转换来“破解”错误。
shared_ptr
是指向动态分配对象的指针的包装器。它管理着他们的动态生命。
array
是一个包含自动存储持续时间的数组的包装器。它包装的uint8_t
数组不是动态分配的内存块。
因此,这种转换是完全不合适的,并且会导致未定义的行为...即使您可以将其编译也是如此。一般情况下,使用像static_cast
这样的C ++强制转换,这会像C强制转换那样以不正确的转换方式出错。
(很有可能使用C版画使其“正常工作”,但实际上你通常所做的就是将你的头埋在沙子里,唱着“啊......”而你的代码崩溃成废话。)
为什么不呢:
ByteBuffer b(buffer.data(), buffer.size());
如果ByteBuffer
确实需要shared_ptr
作为输入,那么您将不得不将数据存储在shared_ptr
控制的动态块中要开始的内存,或将其复制到一个用于此操作。
答案 1 :(得分:1)
我不确定你要做什么。如果要创建1000 uint8_t的引用计数块,则创建共享数组:
boost::shared_array<uint8_t>(new uint8_t[1000])
答案 2 :(得分:0)
完成这项工作的唯一方法如下。我认为这是一个非常糟糕的想法:
boost::array<uint8_t,1000> buffer;
ByteBuffer b(boost::shared_ptr<uint8_t>(buffer.data(), [](uint8_t*){}), buffer.size()); // Note that the deleter does nothing.
答案 3 :(得分:0)
什么是ByteBuffer?这是一个标准的库类,来自其他地方的类,还是你自己编写的类?什么是声明,它在实例化时期望什么类型?
听起来像是一个用于管理大块原始内存的类 - 但是boost:array或shared_array ALREADY就是这样做的。你究竟想要实现什么目标?
我认为: