注册 登录
编程论坛 C++教室

new type[][]的疑惑

lintaoyn 发布于 2010-10-24 09:01, 782 次点击
程序代码:
#include<iostream>
using namespace std;
class test
{
public:
    operator int()
    {
        return i;
    }
    test(int k = 1):i(k)
    {
        cout << "test" << ' ';
    }
    ~test()
    {
        cout << "~test" << ' ';
    }
    int i;
};
int main()
{
    test (*P)[5] = new test[4][5];
    delete []P;
    system("pause");
    return 0;
}
一句delete[]P就可以释放整个数组,求编译器是什么解释new[][].又是什么处理delete []P;
5 回复
#2
pangding2010-10-24 17:32
new [][] 里的第二维中的常数必须给出是为了在编译期生成其它语句时方便寻址而考虑的。
但是总的来看,它还是标记申请了一大块内存,总大小是多少。delete [] 只看那个总大小,放了就行了。

呵呵,根据现象给出的一种合理推测。不一定对啊~~
#3
寒风中的细雨2010-10-25 07:19
delete  p//只是告诉编译器 内存中有单一对象
delete []p//告诉编译器 内存中有“数组大小记录” 确认p是指向一个数组
#4
寒风中的细雨2010-10-25 07:34
new type[N] 只是开辟连续的空间大小 N 的内存 多维就有点中间事情要自己做 上面那种事自己已经定制啦第二维下标
上面的test (*P)[5] = new test[4][5];
可以理解成 typedef test Q[5];
Q  *p = new Q[4];//二维
还是可以继续:typedef test Q[4][5];
Q *p = new Q[3];//三维



#5
lintaoyn2010-10-25 10:43
回复 4楼 寒风中的细雨
3Q
#6
pangding2010-10-25 18:46
new 不止这么点功能,用好了狠着呢~~
STL 库里还提供了调试用的函数,用着很方便。
1