gpt4 book ai didi

c++ - 在析构函数中删除 []

转载 作者:行者123 更新时间:2023-11-28 07:59:08 24 4
gpt4 key购买 nike

嗯,我正在研究模板,我对下一个代码有疑问:

        #include <iostream>

using namespace std;

template<class T, int n>
class Table
{
public:
Table();
//~Table();
int& operator[](int i);
bool Resize(int n);
int Count();
void Free();

private:
T* inst;
int count;
};

template<class T, int n>
Table<T, n>::Table()
{
inst = new T[n];
count = n;
}

template<class T, int n>
void Table<T, n>::Free()
{
delete[] this->inst;
}

template<class T, int n>
int& Table<T, n>::operator[](int i)
{
return inst[i];
}

template<class T, int n>
bool Table<T, n>::Resize(int n)
{
this->inst = (T*)realloc(this->inst, sizeof(T)*count + sizeof(T)*n);
if(!inst)
return false;

return true;
}

template<class T, int n>
int Table<T, n>::Count()
{
return this->count;
}

template<typename T, int n> void ShowTable(Table<T, n> t)
{
for(int i=0; i<t.Count(); i++)
cout<<t[i]<<endl;
}

int main()
{
Table<int, 2> table;
table[0] = 23;
table[1] = 150;
ShowTable(table);

system("pause");
table.Free();

return 0;
}

它有效,但是,当我将 delete[] this->inst; 放入析构函数时,它抛出一个断言失败,我不知道为什么......我的意思是,在析构函数中删除资源不好吗?

最佳答案

您在以下方法定义中有一个重复的标识符 n:

    template<class T, int n>
bool Table<T, n>::Resize(int n)

我在使用上述声明进行编译时遇到了一个错误,我很惊讶你没有。您需要将其中一个 int n 重命名为其他名称(例如 Resize(int newsize))。

在析构函数中删除你的inst成员是没有问题的。这就是您应该做的,以避免内存泄漏。

关于c++ - 在析构函数中删除 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11962608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com