一个关于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;