大家一个小疑点
求助大家一个小问题
用malloc函数创建的指针,释放指针所指对象的时候,控制台为什么会卡住不动,
而new建立的内存,释放内存不会卡住呢。用delete或者free函数释放的内存。还有他们有什么区别吗?
------解决方案--------------------
------解决方案--------------------
析构函数只是释放对象而已,如果new出内存空间的话, 还是需要手动delete掉的!
------解决方案--------------------
谁说释放内存就是调用析构函数,调用析构函数的目的是为了在释放内存前做些处理,比如
class A
{
int a;
int c;
};
class B
{
int b;
A *pA;
B()
{
pA = new A;
}
~B()
{
delete pA;
}
}
如果你new B;申请一块内存,然后你delete后,如果你不在析构函数中delete pA的话,只是释放了B中的int b;A *pA;你申请的pA指向的内存并不会被释放
------解决方案--------------------
用malloc函数创建的指针,释放指针所指对象的时候,控制台为什么会卡住不动,
而new建立的内存,释放内存不会卡住呢。用delete或者free函数释放的内存。还有他们有什么区别吗?
------解决方案--------------------
malloc 只会分配内存的 不会调用构造函数 帮你构造对象的
new 会调用构造函数构造对象的
free 只是释放内存空间, 不会调用析构函数的!
delete 会调用析构函数析构对象的!
malloc 和 free成对出现
new 和delete 成对出现
------解决方案--------------------
析构函数只是释放对象而已,如果new出内存空间的话, 还是需要手动delete掉的!
------解决方案--------------------
释放内存不就是调用析构函数才可以吗?不调用析构函数怎么释放内存呢
malloc 只会分配内存的 不会调用构造函数 帮你构造对象的
new 会调用构造函数构造对象的
free 只是释放内存空间, 不会调用析构函数的!
delete 会调用析构函数析构对象的!
malloc 和 free成对出现
new 和delete 成对出现
谁说释放内存就是调用析构函数,调用析构函数的目的是为了在释放内存前做些处理,比如
class A
{
int a;
int c;
};
class B
{
int b;
A *pA;
B()
{
pA = new A;
}
~B()
{
delete pA;
}
}
如果你new B;申请一块内存,然后你delete后,如果你不在析构函数中delete pA的话,只是释放了B中的int b;A *pA;你申请的pA指向的内存并不会被释放
------解决方案--------------------
#include <iostream>
using namespace std;
int main()
{
void *p=malloc(4);
int a=5;
p=&a;
cout<<*reinterpret_cast<int*>(p)<<endl;
free(p);
return 0;
}
代码贴上一运行,为什么会卡住不动