14.1堆,操作堆内存时,如果分配了内存,就有责任回收它。否则运行的程序将会造成内存泄漏这与函数在栈区分配局部变量有本质的不同对C++来说,管理堆区是一件十分复杂的工作需频繁地分配和释放不同大小的堆空间,将会产生堆内存碎块
• 操作堆内存时,如果分配了内存,就有责任 回收它。 • 否则运行的程序将会造成内存泄漏。 • 这与函数在栈区分配局部变量有本质的不同。 • 对C++来说,管理堆区是一件十分复杂的工作, • 需频繁地分配和释放不同大小的堆空间,将 会产生堆内存碎块
14.2需要new和delete的原因。在c++中不使用malloc()函数的一个原因是:√它在分配空间的时候不能调用构造函数√类对象的建立是分配空间、构造结构以及初始化的三位一体,√它们统一由构造函数来完成
• 在C++中不使用malloc()函数的一个原因是: ✓ 它在分配空间的时候不能调用构造函数。 ✓ 类对象的建立是分配空间、构造结构以及 初始化的三位一体, ✓ 它们统一由构造函数来完成
14.2需要new和delete的原因例如:下面的代码用malloc()分配对象空间classTdate1public:Tdate();SetDate(int m = 1, int d = 1, int y = 1998) ;protected:int month;intday ;intyear ;:
例如:下面的代码用malloc( )分配对象空间 class Tdate { public: Tdate( ); SetDate( int m = 1, int d = 1, int y = 1998) ; protected: int month ; int day ; int year ; } ;
14.2需要new和delete的原因Tdate : : Tdate ()(month = 1 ;day = 1;year = 1 ;void Tdate : : SetDate( int m , int d , int y)Iif(m>0&&m<13)month = m ;if(d>0&&d<32)day = d;if(y>0&&y<3000)year =y;11
Tdate : : Tdate ( ) { month = 1 ; day = 1; year = 1 ; } void Tdate : : SetDate( int m , int d , int y ) { if ( m > 0 && m < 13 ) month = m ; if ( d > 0 && d < 32 ) day = d ; if ( y > 0 && y < 3000 ) year = y ; }
14.2需要new和delete的原因void fn()Tdate*pD;//仅仅是个指针,没有产生对象并不调用构造函数pD =(Tdate *)malloc(sizeof Tdate);二并不调用析构函数free(pD) ;1注:指针pD的声明不调用其构造函数,因为pD没有指向任何东西
void fn ( ) { Tdate * pD ; //仅仅是个指针,没有产生对象 //并不调用构造函数 pD = ( Tdate * )malloc( sizeof Tdate ) ; //. free(pD) ; //并不调用析构函数 } 注:指针pD的声明不调用其构造函数,因为pD没有指向 任何东西