我在使用模板类时,出现了一个奇怪的问题
这个是源程序
#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,但是如果我将它注释掉,程序跑的很正常,但是内存会泄露,有谁可以帮忙改改吗?谢谢!