关于c++中new的用法

请问new出一个对象的指针 会执行构造函数么。delete掉该对象指针会调用析构函数么 ,高手解答!
还想问一下,我在一个程序中总是new出来对象指针但不做delete释放,那么堆内存最大是多少,这样做程序结束后,这些内存会释放还是被系统回收啊(Linux系统)?有什么坏处么?

new出一个对象指针当然不会执行构造函数,同样delete掉该对象指针也不会执行析构函数。举例:

#include "iostream.h"
class A
{
public:
A()
{
cout<<"执行构造函数"<<endl;
}
~A()
{
cout<<"执行析构函数"<<endl;
}
};

int main()
{
cout<<"构造A "<<endl;
A a;//执行构造函数
cout<<endl;
cout<<"new一个A"<<endl;
A* pa;
pa=new A;//执行构造函数
cout<<endl;
cout<<"new一个A指针"<<endl;
A* *ppa;
ppa=new A*;//不执行构造函数
cout<<endl;
cout<<"析构A指针"<<endl;
delete ppa;//不执行析构函数
cout<<endl;
cout<<"析构A"<<endl;
delete pa;//执行析构函数
cout<<endl;
cout<<"a在堆栈,无法delete"<<endl;
getchar();
return 0;
}

Linux没用过,不过我猜跟windows相似。
在电脑上(只能在电脑上,其他地方很难说的)爱怎么new就怎么new,因为有虚拟内存。只是速度会变得很慢而已。程序结束后会被系统回收
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-20
当然,new就是执行构造,delete执行析构

class CObject { };
CObject * j = new CObject(); // 执行缺省构造函数
delete j; //执行缺省析构函数

如果不是对象,则调用malloc和free
int * i = new int[10]; //创建数组,相当于 int * i = malloc(10 * sizeof(int));

delete [] i; //相当于free(i);
相似回答
大家正在搜