读书人

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

发布时间: 2013-12-29 13:07:03 作者: rapoo

初学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执行停在该断点处的时
候。

读书人网 >C++

热点推荐