问一个模板类的指针问题
  • 板块学术版
  • 楼主mt19337
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/8/8 20:35
  • 上次更新2023/11/6 20:54:44
查看原帖
问一个模板类的指针问题
33556
mt19337楼主2020/8/8 20:35

我在使用模板类时,出现了一个奇怪的问题

这个是源程序

#pragma once
#include <assert.h>

using namespace std;
template <typename T, int... S>
class Arr;

template <typename T,int Val, int... S>
class Arr<T, Val, S...>{
public: 
	Arr <T, S...>* p;
	Arr(){
		p = new Arr <T, S...>[Val + 10];
	}
	Arr <T, S...>& operator[] (int x){
		assert(x < Val);
		assert(x >= 0);
		return *(p+x);
	}
	~Arr(){        //  /
	    delete p;  // <-------这里
	}              //  \
};

template <typename T, int Val>
class Arr<T, Val>{
public: 
	T* p;
	Arr(){
		p = new T[Val + 10];
	}
	T& operator[] (int x){
		assert(x < Val);
		assert(x >= 0); 
		p[x];
		return p[x];
	}
	~Arr(){
		delete p;
	}
};

int main(){
	Arr<int, 2, 2> a;
}

注意我加注释的这一个析构函数,如果我这样写,会导致RE,但是如果我将它注释掉,程序跑的很正常,但是内存会泄露,有谁可以帮忙改改吗?谢谢!

2020/8/8 20:35
加载中...