C++ 为什么这个模板类没有';你不能正常工作吗? #包括 使用名称空间std; 模板 类数组{ 公众: 数组(int-sizeOfArray=1){ arr=新的T[sizeOfArray]; 对于(int i=0;i
OP报告的错误可能是三次违反规则的结果C++ 为什么这个模板类没有';你不能正常工作吗? #包括 使用名称空间std; 模板 类数组{ 公众: 数组(int-sizeOfArray=1){ arr=新的T[sizeOfArray]; 对于(int i=0;i,c++,class-template,C++,Class Template,OP报告的错误可能是三次违反规则的结果 add会泄漏内存,因为它在替换arr之前不会删除arr,这在add中比在growtarray中要困难得多(当然不会太多),所以 void add(T element) { if (currentElement >= maxSize) { arr = growArray(); <<- did not release the old array pointed at by arr } arr[c
add
会泄漏内存,因为它在替换arr
之前不会删除arr
,这在add
中比在growtarray中要困难得多(当然不会太多),所以
void add(T element)
{
if (currentElement >= maxSize)
{
arr = growArray(); <<- did not release the old array pointed at by arr
}
arr[currentElement] = element;
currentElement++;
}
void growtarray()OP报告的bug可能是违反三条规则的结果
add
会泄漏内存,因为它在替换arr
之前不会删除arr
,这在add
中比在growtarray中要困难得多(当然不会太多),所以
void add(T element)
{
if (currentElement >= maxSize)
{
arr = growArray(); <<- did not release the old array pointed at by arr
}
arr[currentElement] = element;
currentElement++;
}
void growtarray()建议不要对#include using namespace std使用高级别的警告;
看起来您可能有三个失败规则。您每次都在泄漏内存arr=growtarray()
但如何在不占用内存的情况下读取该数组?要获得预期的结果,请定义复制构造函数和赋值运算符(但仍有许多问题需要解决,请参阅/了解std::vector
实现)为避免内存泄漏,在为其分配新分配的内存指针之前,您需要删除arr
。建议不要对#包括使用命名空间std;
看起来您可能有三个失败规则。您每次都在泄漏内存arr=growtarray()
但如何在不占用内存的情况下读取该数组?要获得预期的结果,请定义复制构造函数和赋值运算符(但仍有许多问题需要解决,请参阅/了解std::vector
实现)为避免内存泄漏,您需要删除arr
,然后再为其分配新分配的内存指针。
void add(T element)
{
if (currentElement >= maxSize)
{
arr = growArray(); <<- did not release the old array pointed at by arr
}
arr[currentElement] = element;
currentElement++;
}
void growArray() <<- returns nothing
{
T* newarr = new T[maxSize * 2];
for (int i = 0; i < maxSize; i++)
{
newarr[i] = arr[i];
}
maxSize = maxSize * 2;
delete arr; <<- clean up old arr
arr = newarr; <<- assign arr here
}
void add(T element)
{
if (currentElement >= maxSize)
{
growArray(); <<- everything done by growArray
}
arr[currentElement] = element;
currentElement++;
}