向一系列指针及其替代方案的动态分配
Dynamic allocation to array of pointers and its alternatives
使用新int分配数组的标准方法是:
int* arr = new int[50];
以这种方式声明它时,将有连续的内存分配,并且变量堆栈中将有一个数组变量。
如果我想以50个不同的指针变量的形式声明它,以便每个指针都有不同的内存地址,而不一定是最明显的选择方式,就是这样:
int * arr[50];
但是,以这种方式,分配内存的命令/代码(即通过新的int)以及每种方式声明的缺点或优势是什么。
显而易见的方法是在所有元素上迭代并为它们分配内存:
for (int i = 0; i < 50; i++){
arr[i] = new int;
}
非连续内存块的缺点将是缓存失误。您可以在此处阅读更多信息。
如何分配,在此答案中已经提到了;因此不重复。
对于单个int
分配,您的下线是过度杀伤:
int* arr[50]; // all downsides only
您应该使用简单的整数:
int arr[50];
最好通过标准容器来利用设施,例如:
std::vector<int> vi; // if the number of int-s are dynamic
std::array<int, 50> ai; // if the number of int-s are fixed
最后,从这个答案中,
"避免使用指针,直到无法...因此,只有在别无选择的情况下,经验法则才是使用指针。"
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问动态分配列表中的元素
- 为什么 std::equal_to会导致动态分配?
- 调用析构函数以释放动态分配的内存
- 动态分配Q_Property变量
- 在 C++ 中搜索动态分配的数组中的出现次数
- 动态分配的聊天数组打印缺失的数据和空
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 使用动态分配将 char* 复制到另一个字符**
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 二维阵列的动态分配
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 在运行时为动态分配的内存输入值
- 向一系列指针及其替代方案的动态分配
- 具有对齐成员的对象的动态分配-可能的解决方案