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);
	}
posted @ 2021-02-05 15:13  Square_Circle  阅读(51)  评论(0)    收藏  举报