#define N 10
int (*p)[N] = new int[N];
// or
typedef int TenInts[N];
TenInts *p = new TenInts;
这是C ++语言根本不允许的吗?有没有解决方法? (std::vector
除外,因为我需要的是一个具有已知编译时大小的动态分配数组)\
我需要new
,因为我将静态数组放在使用new
的模板中,模板接受泛型类型T
。考虑template<typename T> void f() {T *t = new T;}
,我希望T
成为静态数组。
答案 0 :(得分:1)
你想要
int *p = new int[N];
您无法在编译时指定要动态分配的数组的大小。你为什么要这样做呢
答案 1 :(得分:1)
因为我只需要一个具有已知编译时大小的动态分配数组
在这种情况下,您无需使用new
。
只需使用
#define N 10
std::array<int,N> p;
答案 2 :(得分:1)
你不能使用
int (*p)[N] = new int[N];
但是,您可以使用:
int (*p)[N] = new int[1][N];
答案 3 :(得分:0)
也许这就是你想要的。
#include <array>
constexpr size_t N = 10;
auto * ptr = new std::array<int, N>();
这允许您使用new
在运行时创建一个编译时常量大小的数组。
编辑:我假设,当您说“我的模板使用new
”时,您的意思是new
,而不是new[]
。这意味着您的模板最终会调用delete
而不是delete[]
。
答案 4 :(得分:0)
你可以写:
int (*p)[N] = new int[1][N];
或如果您想要多行,请用更大的数字替换1
。