C++ 为什么这个模板类没有';你不能正常工作吗? #包括 使用名称空间std; 模板 类数组{ 公众: 数组(int-sizeOfArray=1){ arr=新的T[sizeOfArray]; 对于(int i=0;i

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

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[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++;
}