如何将`new`用于数组的指针

how to use `new` for pointer to array

本文关键字:数组 指针 用于 new      更新时间:2023-10-16
#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成为静态数组。

您想要

int *p = new int[N];

您无法在编译时间指定您打算动态分配的数组的大小。你为什么要这样做

我所需要的只是一个动态分配的阵列,具有已知的编译时大小

在这种情况下,您不需要使用new

只使用

#define N 10
std::array<int,N> p;

您不能使用

int (*p)[N] = new int[N];

但是,您可以使用:

int (*p)[N] = new int[1][N];

您可以写:

int (*p)[N] = new int[1][N];

或者如果需要几行替换1

也许这就是您想要的。

#include <array>
constexpr size_t N = 10;
auto * ptr = new std::array<int, N>();

这使您可以使用new在运行时创建一个具有编译时常数大小的数组。

编辑:我假设当您说"我的模板使用new"时,您的意思是new而不是new[]。这意味着您的模板最终调用delete,而不是delete[]