C++20中如何动态分配指向返回数组指针的函数的指针数组
动态分配函数指针数组的正确方式
首先明确目标:你需要动态分配一个包含3个元素的数组,每个元素是指向funcArrayReturn的函数指针。原类型声明int (*(*(*funcPtr2)[3])())[6]可读性极低,推荐先通过类型别名简化后再分配,既清晰又不易出错。
方法1:用类型别名简化(推荐)
先拆解复杂类型,定义多层别名:
// 指向int[6]数组的指针类型 using Int6ArrayPtr = int (*)[6]; // 返回Int6ArrayPtr的函数类型 using ArrayReturningFunc = Int6ArrayPtr(); // 指向上述函数的指针类型 using FuncPtr = ArrayReturningFunc*;
接着动态分配包含3个FuncPtr元素的数组:
// 分配数组,元素默认初始化为nullptr(C++11及以上支持) FuncPtr* funcPtrArray = new FuncPtr[3]{}; // 给数组元素赋值(指向目标函数) funcPtrArray[0] = &funcArrayReturn; funcPtrArray[1] = &funcArrayReturn; funcPtrArray[2] = &funcArrayReturn;
方法2:直接使用复杂类型分配
如果一定要贴合你给出的原始类型,对应的分配语句如下:
// 直接分配符合目标类型的数组 int (*(*funcPtr2)[3])())[6] = new int (*(*[3])())[6]{}; // 给数组元素赋值示例 (*funcPtr2)[0] = &funcArrayReturn;
额外注意
- 你实现的
funcArrayReturn中,new int[1][6]{25}会将数组第一个元素初始化为25,其余元素值为0(C++值初始化规则),使用完返回的数组指针后记得调用delete[]释放内存,避免泄漏。 - 动态分配的函数指针数组使用完毕后,也需要用
delete[]释放:delete[] funcPtrArray;或delete[] funcPtr2;。
内容的提问来源于stack exchange,提问作者BeginnerVS2019
相关产品推荐
相关产品推荐

