在 VC++ 中创建无需"new"的动态数组
Creating dynamic arrays without "new" in VC++
我想在Visual Studio中创建一个数组,因为它在C99中是可能的:
int function(int N)
{
int x[N];
return 1;
};
但即使是VS2013也不支持这一点。有没有另一种方法(除了使用 new 和 delete)来创建x
而无需在翻译时修复 N?谢谢!
在C++中这样做的宽容方法是使用向量
#include <vector>
int function(int N)
{
std::vector<int> x(N);
return 1;
};
如果你知道 N 不会很大(而且因为你似乎希望在堆栈上这个内存,无论如何),你可以使用 _alloca
,这是一个 C 函数。请参阅此处的文档。
#include <malloc.h>
int function(int N)
{
int *x = _alloca(sizeof(int)*N);
return 1;
};
这并不真正推荐,并且已被 _malloca
取代,这需要在您完成内存后调用 _freea
。
请注意,当函数退出时,两个版本都会释放内存,但第一个版本将在堆上分配内存,而第二个版本将在堆栈上分配(因此对N
的上限要严格得多)。除了 std::vector
类的便利性和低开销之外,在 C++ 程序中使用 C 样式指针无论如何都是一种缺点。:)
为了在堆栈上定义C++数组(即没有new
),必须在编译时知道它的大小,例如const int
或预处理器宏。由于在这种情况下不是这种情况,因此您可以改用以下内容:
#include <vector>
using namespace std;
// ...
int function(int n)
{
vector<int> x (n);
return 1;
}
在
C++ 的堆栈中没有这样的可能定义可变长度数组。但是你可以使用 std::vector 代替,尽管它会在堆中分配内存。
相关文章:
- g++用户定义的动态链接库上的全局new和delete运算符
- 是否可以使用 new 指定具有宏常量的动态分配数组的元素?
- 如何在C++中使用 new 运算符创建对动态创建的数组的引用?
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 在c++中,在new(动态分配)之前使用星号(*)
- 如何在C++中使用"new"动态分配向量数组?
- 了解C++中的动态对象("new")
- 在c++中使用new操作符动态分配数组
- 在 VC++ 中创建无需"new"的动态数组
- 使用 new [] 在 C++ 中创建自定义 a 类型的动态数组
- 删除使用placement new分配的动态多态对象
- 如何使用运算符 new 来计算动态内存分配的次数
- 如何在不使用默认构造函数的情况下通过new创建对象的动态大小数组
- 在C++中使用带有二进制搜索的new动态内存分配
- 在动态分配中,在关键字new之前使用Why(unsigned char*)
- 'new'在C++中是如何动态的
- 动态2d数组:int(*ptr)[4]=new int[7][4];
- 在C++中,如何在没有动态分配(即NEW)的情况下将对象初始化为对象内部的指针
- 当我们可以使用=运算符为字符串赋值时,为什么要在赋值之前使用new运算符为字符串动态分配内存