初学class,一个构造函数和delete不会用,了
初学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执行停在该断点处的时
候。