首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个关于delete和new的语法有关问题

2013-04-20 
一个关于delete和new的语法问题一般情况下,对应的new和delete需要采用相同的形式,譬如:int* ptrnew intd

一个关于delete和new的语法问题
  一般情况下,对应的new和delete需要采用相同的形式,譬如:
  
    int* ptr=new int; 
    delete ptr;
  
    ptr=new int[num]; 
    delete [] ptr;

  但是如果我们有下面的代码:
     struct A{
        int num;
     };
     A * pa= reinterpret_cast(A*)(new int [20]);
     delete pa;
  是否会出现内存泄露呢??
delete new
[解决办法]
delete带不带[]主要区别在于,带[]的会对每个元素执行析构函数,不带的只会对第一个进行析构,对基本数据是没什么影响的,但是如果是有动态分配内存的类就会产生内存泄露
[解决办法]
for循环一下,对每个数组进行delete,不会发生内存泄露
[解决办法]
你那样写,完全可能直接程序崩溃。
就别瞎试了,严格照规则写代码。
[解决办法]
在你这个代码里面,没有关系,因为你的类没有申请资源(比如new/malloc什么的),只delete一下关系不大。
但是,如果你的类里面还申请有别的资源,比如下面这个类:

struct B
{
B(){}
~B(){}
private:
int i;
};

struct A
{
A()
{
s = new B();
}
~A()
{
delete bs;
}
private:
B * bs;
};


如果你写:
A* a = new A()[10];
delete a;

那么你申请了10个A,每个A里面申请了一个B,
但是你在释放时只释放了第一个A,A析构时只释放了这个A里面申请的B,后面的资源没有释放,就产生了内存泄露。

[解决办法]
用reinterpret_cast属于蛮干。在你的例子中不会造成内存泄露,但是在别的例子里,估计程序会崩溃。
[解决办法]
引用:
引用:引用:引用:这个题你表述不清楚
如果C++ new 和 delete 不匹配,比如
C* myObj = new C[10];
正确应该是
delete [] myObj;
但你调用的是 delete myObj;

这种情况下
正确……


认真思考了下,我理解的很肤浅,看了点别人的解说,猜想分配了多少内存不管是什么类型的指针指向这块内存其实delete应该是一样的,比如转换成void*也能释放,区别是对象释放会调用析构函数。

热点排行