2021/2/5 关于new的一个教训
千万不要在类构造函数的初始化里new
任何东西,这会导致析构函数delete
一个野指针!构造函数一定要把所有的指针初始化为nullptr
!
以下代码会报错(堆内存崩溃):
Integer::Integer(long long n)
: Buffer(DEFAULT_BUFFER), Length(0), Num(new int[Buffer])
{
while (n > 10) {
Num[Length++] = (int)(n % 10);
n /= 10;
}
Num[Length++] = (int)(n % 10);
}
以下是正确的版本:
Integer::Integer(long long n)
: Buffer(DEFAULT_BUFFER), Length(0), Num(nullptr)
{
Num = new int[Buffer];
while (n > 10) {
Num[Length++] = (int)(n % 10);
n /= 10;
}
Num[Length++] = (int)(n % 10);
}