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

初学class,一个构造函数和delete不会用,了

2013-12-29 
初学class,一个构造函数和delete不会用,求助了。class X {public:x():buffer_(0),isComputed_(false)//构造

初学class,一个构造函数和delete不会用,求助了。


class X {
public:
  x():buffer_(0),isComputed_(false)//构造函数用冒号加貌似两个函数什么意思啊?
   //....
     void setBuffer() {
          int *tmp =new int [MAX];
          delete [] buffer_;//这个是什么用法?不是应该用“(一个指针)”吗?
          buffer_=tmp;
}

[解决办法]
1、初始化成员变量
2、buffer_申请的是一组地址,比如int *p = new int[10];相当于申请了一个数组,类似于int p[10],只不过分配的地方不同,一个在栈上,一个在堆上。所以delete的时候需要对应的用delete[]。
不过这里好像有点小问题,如果buffer_为NULL,那么直接delete[] buffer_,必定会报错,应该要先判断吧。
[解决办法]
引用:
1、初始化成员变量
2、buffer_申请的是一组地址,比如int *p = new int[10];相当于申请了一个数组,类似于int p[10],只不过分配的地方不同,一个在栈上,一个在堆上。所以delete的时候需要对应的用delete[]。
不过这里好像有点小问题,如果buffer_为NULL,那么直接delete[] buffer_,必定会报错,应该要先判断吧。


引用:
1、初始化成员变量
2、buffer_申请的是一组地址,比如int *p = new int[10];相当于申请了一个数组,类似于int p[10],只不过分配的地方不同,一个在栈上,一个在堆上。所以delete的时候需要对应的用delete[]。
不过这里好像有点小问题,如果buffer_为NULL,那么直接delete[] buffer_,必定会报错,应该要先判断吧。


你这是过与担心了。
C++保证delete []NULL 和delete NULL 不会出错。


[解决办法]
引用:
Quote: 引用:

1、初始化成员变量
2、buffer_申请的是一组地址,比如int *p = new int[10];相当于申请了一个数组,类似于int p[10],只不过分配的地方不同,一个在栈上,一个在堆上。所以delete的时候需要对应的用delete[]。
不过这里好像有点小问题,如果buffer_为NULL,那么直接delete[] buffer_,必定会报错,应该要先判断吧。

  不好意思还是没看懂问题一,构造函数初始化不是应该在他的函数体里面么? 冒号和函数怎么用来着?

加个冒号 叫做构造函数初始化列表
在初始化列表中叫做初始化,在构造函数体内叫做赋值
有三种类型的变量必须使用初始化列表,建议lz看看《C++ Primer》对这部分的介绍
[解决办法]
少年啊,千万要重视单步调试和设置断点,
用VC调试时记得按下Alt+5、Alt+6、Alt+7和Alt+8。


对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和
寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时
候。

热点排行