在构造函数的过程中,因为初始化成员列表要先于构造函数,因此在构造函数的过程中要避免将堆内存直接分配到初始化成员函数当中。因为当你初始化的时候,有时候并不清楚要分配几个数组的内存空间。
例如下面的pdatas,在堆中分配内存,因此,不能将他写成如下形式。
MyArray(int len = 1):len(len),pdatas = new int[len]
{
//由于初始化构造比len的内部参数要早,因此为了保险起见,将
//赋值的地方放在内部
};
正常一点的写法应该是下面这种。
class MyArray
{
public:
MyArray(int len = 1):len(len)
{
//由于初始化构造比len的内部参数要早,因此为了保险起见,将
//赋值的地方放在内部
pdatas = new int[len];
};
~MyArray()
{
delete[] pdatas;
pdatas = NULL;
};
private:
int* pdatas;
int len;
};
本文讨论了在C++中构造函数中初始化成员列表的注意事项,强调不应在成员初始化列表中直接分配堆内存。以MyArray类为例,解释了为什么在构造函数内部进行内存分配更为安全,以确保正确初始化成员变量len后的pdatas指针。此外,还展示了正确的构造函数和析构函数实现,以确保内存管理的正确性。
4267

被折叠的 条评论
为什么被折叠?



