C++ 如何将boost::array转换为boost::shared_ptr boost::数组缓冲区; ByteBuffer b((boost::shared_ptr)buffer.data(),buffer.size());
嗯,强制转换可以工作,但是当调试程序运行到方法的末尾时,它会给我一个错误,所以我想知道是否有其他方法可以强制转换/转换它,使其工作 这毫无意义。您正试图通过应用任意类型转换来“破解”错误C++ 如何将boost::array转换为boost::shared_ptr boost::数组缓冲区; ByteBuffer b((boost::shared_ptr)buffer.data(),buffer.size());,c++,arrays,boost,shared-ptr,C++,Arrays,Boost,Shared Ptr,嗯,强制转换可以工作,但是当调试程序运行到方法的末尾时,它会给我一个错误,所以我想知道是否有其他方法可以强制转换/转换它,使其工作 这毫无意义。您正试图通过应用任意类型转换来“破解”错误 shared_ptr是指向动态分配对象指针的包装器。它管理它们的动态生命周期 array是一个围绕数组的包装器,具有自动存储持续时间。它包装的uint8\t数组不是动态分配的内存块 因此,这种转换是完全不合适的,将导致未定义的行为。。。即使你可以编译它。一般来说,使用C++的方式类似于StasyType Cas
shared_ptr
是指向动态分配对象指针的包装器。它管理它们的动态生命周期
array
是一个围绕数组的包装器,具有自动存储持续时间。它包装的uint8\t
数组不是动态分配的内存块
因此,这种转换是完全不合适的,将导致未定义的行为。。。即使你可以编译它。一般来说,使用C++的方式类似于boost::array<uint8_t,1000> buffer;
ByteBuffer b((boost::shared_ptr<uint8_t>)buffer.data(), buffer.size());
如果
ByteBuffer
确实需要一个shared_ptr
作为输入,那么您必须首先将数据存储在一个shared_ptr
控制的动态内存块中,或者将其复制到一个内存块中进行此操作。这没有意义。您正试图通过应用任意类型转换来“破解”错误
shared_ptr
是指向动态分配对象指针的包装器。它管理它们的动态生命周期
array
是一个围绕数组的包装器,具有自动存储持续时间。它包装的uint8\t
数组不是动态分配的内存块
因此,这种转换是完全不合适的,将导致未定义的行为。。。即使你可以编译它。一般来说,使用C++的方式类似于boost::array<uint8_t,1000> buffer;
ByteBuffer b((boost::shared_ptr<uint8_t>)buffer.data(), buffer.size());
如果
ByteBuffer
确实需要一个shared\u ptr
作为输入,那么您必须首先将数据存储在shared\u ptr
控制的动态内存块中,或者将其复制到一个动态内存块中以进行此操作。实现此功能的唯一方法如下。我认为这是一个非常糟糕的主意:
ByteBuffer b(buffer.data(), buffer.size());
boost::数组缓冲区;
ByteBuffer b(boost::shared_ptr(buffer.data(),[](uint8_t*){},buffer.size());//请注意,删除程序不执行任何操作。
完成这项工作的唯一方法是:。我认为这是一个非常糟糕的主意:
ByteBuffer b(buffer.data(), buffer.size());
boost::数组缓冲区;
ByteBuffer b(boost::shared_ptr(buffer.data(),[](uint8_t*){},buffer.size());//请注意,删除程序不执行任何操作。
我不确定你想做什么。如果要创建1000 uint8_t的引用计数块,请创建共享阵列:
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.
boost::共享阵列(新uint8\U t[1000])
我不确定你想做什么。如果要创建1000 uint8_t的引用计数块,请创建共享阵列:
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.
boost::共享阵列(新uint8\U t[1000])
什么是ByteBuffer?这是一个标准的库类,一个来自其他地方的类,还是您自己编写的类?声明是什么,实例化时需要什么类型
对我来说,这听起来像是一个管理一大块原始内存的类——但boost:array或shared_array已经做到了这一点。你到底想做什么
我认为:
- ByteBuffer需要一个指向现有内存的原始指针(char*),而您错误地使用了shared_ptr(shared_ptr仅适用于由“new”分配的单个对象)
- 或者,您根本不需要ByteBuffer,您需要的一切都可以通过boost::array完成
- 或者,ByteBuffer希望共享的ptr是某种类型的对象,而不是数组
- 或者,ByteBuffer确实希望对一个数组使用一个共享的ptr,但这几乎肯定是失败的。这样做是可能的,但(a)强制转换不起作用,只是说“这个内存,把它当作另一种对象来解释,即使它只是把垃圾数据放进去”(除非这两种类型有内置转换,而array和shared_ptr没有)和(b)这很奇怪,也很微妙,老实说,我一秒钟也不相信ByetBuffer会期待这个,或者如果它期待的话,它值得使用
- ByteBuffer需要一个指向现有内存的原始指针(char*),而您错误地使用了shared_ptr(shared_ptr仅适用于由“new”分配的单个对象)
- 或者,您根本不需要ByteBuffer,您需要的一切都可以通过boost::array完成
- 或者,ByteBuffer希望共享的ptr是某种类型的对象,而不是数组
- 或者,ByteBuffer确实希望对一个数组使用一个共享的ptr,但这几乎肯定是失败的。这样做是可能的,但(a)强制转换不起作用,只是说“这个内存,把它当作另一种对象来解释,即使它只是把垃圾数据放进去”(除非这两种类型有内置转换,而array和shared_ptr没有)和(b)这很奇怪,也很微妙,老实说,我一秒钟也不相信ByetBuffer会期待这个,或者如果它期待的话,它值得使用