我想将一些字节写入数组。为了使用现代 C++,我决定使用智能指针。
#include <memory>
#include <cstdint>
using namespace std;
void writeUint32_t(uint32_t value, unsigned char* p){
*p = static_cast<unsigned char>((value >> 24) & 0xFF);
*(++p) = static_cast<unsigned char>((value >> 16) & 0xFF);
*(++p) = static_cast<unsigned char>((value >> 8) & 0xFF);
*(++p) = static_cast<unsigned char>((value ) & 0xFF);
}
int main(){
auto buf = make_shared<unsigned char[]>(512);
uint32_t data = 1234;
writeUint32_t(data, buf.get() + 8);
}
但是,我收到以下编译错误:
u.cpp:15:37: error: invalid use of array with unspecified bounds
writeUint32_t(data, buf.get() + 8);
^
u.cpp:15:38: error: cannot convert ‘unsigned char (*)[]’ to ‘unsigned char*’ for argument ‘2’ to ‘void writeUint32_t(uint32_t, unsigned char*)’
writeUint32_t(data, buf.get() + 8);
我正在使用 g++ (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609
在这种情况下有没有办法使用智能指针?
原文由 robert 发布,翻译遵循 CC BY-SA 4.0 许可协议
我建议您使用
std::vector<unsigned char> vec(512);
,包装连续动态数组正是它的用途。获取原始缓冲区指针就像vec.data()
一样简单;如果需要共享向量,您仍然可以使用智能指针
由于使用向量,您将获得引用计数的好处,几乎没有开销, 并且 您将获得整个向量 API。