我习惯于使用Java和PHP,现在需要编写一些C++代码。我遇到了创建动态大小的BYTE数组的困难。如何实现呢?
int byteSize = shm.getMemorySize();
BYTE byte[44]; // replace 44 by byteSize
我习惯于使用Java和PHP,现在需要编写一些C++代码。我遇到了创建动态大小的BYTE数组的困难。如何实现呢?
int byteSize = shm.getMemorySize();
BYTE byte[44]; // replace 44 by byteSize
除非您有非常特殊的原因要使用数组,否则应该使用std::vector
。通常,在与其他语言中使用数组的类似上下文中,在C++中默认选择应该是std::vector
。
resize()
。 - πάντα ῥεῖ永远不要使用裸指针,否则会给漏洞和内存泄漏留下后门。相反,以下是一些替代方案:
int len = something;
std::vector<char> buffer(len,0);
std::unique_ptr<char[]> buffer{ new char[len] };
auto buffen = std::make_unique<char[]>(len);
如果您不是必须自己处理内存,建议使用向量。此外,这更多是个人偏好的问题,但我更喜欢使用uint8_t而不是BYTE。它更加符合标准,因为它不依赖于GCC。
#include <vector>
#include <cstdint>
...
std::vector<uint8_t> foo;
或者
#include <cstdint>
...
uint8_t* data;
data = new uint8_t[10];
...
delete[] data;
std::vector
来创建一个动态可调整大小的数组:#include <vector> // For std::vector
....
int byteSize = shm.getMemorySize();
// Create a vector of 'byteSize' bytes.
std::vector<BYTE> bytes(byteSize);
[]
语法(例如bytes [0]
,bytes [1]
,... bytes [i]
)来访问向量元素。
vector
的析构函数将自动释放向量分配的内存,因此您无需关注释放内存。push_back()
方法在向量末尾添加项目(带有自动调整大小)。 您可以使用vector的clear()
方法清空它。并且vector的size()
方法返回向量中当前项目的数量。std::vector
的信息,您可以观看Stephan T. Lavavej的这个精彩的介绍性视频。new
。BYTE* data = new BYTE[byteSize];
data[0] = 0;
delete [] data;
更好的方法是使用std::vector
,它几乎可以避免第一种方法所遇到的问题:
std::vector<BYTE> data;
data.resize(byteSize);
data[0] = 0;
int byteSize = shm.getMemorySize();
BYTE* byte = new BYTE[byteSize];
//Use the byte
delete [] byte;
BYTE byte[byteSize];
。 - πάντα ῥεῖBYTE
是什么? - Lightness Races in Orbit