如何实现删除数组的功能?

How to implement the function of deleting an array?

本文关键字:数组 功能 删除 何实现 实现      更新时间:2023-10-16

帮助添加删除功能,我不确定内存是否自动清除。

template<class T1>
auto auto_array(T1&& _Size) {
return new int64_t[_Size]{};
}
template <class T1, class... T2>
auto auto_array(T1&& _Size, T2&&... _Newsize)
{
auto result = new decltype(auto_array(_Newsize...))[_Size];
for (int64_t i = 0; i < _Size; ++i) {
result[i] = auto_array(_Newsize...);
}
return result;
}
int main() {
auto _Tor = auto_array(3, 2, 7);
return 0;
}

请不要提供矢量,这是一个神圣的。 我已经有一个带有向量的代码。

首先,我不得不说,这不是实现此类功能C++方法。使用 STL 容器或 RAII 概念。

您必须实现删除函数模板来清理分配的内存。您必须将大小传递给此函数,因为指针不知道大小:

#include <cstdint>
template<class T1>
auto auto_array(T1&& _Size) {
return new int64_t[_Size]{};
}
template <class T1, class... T2>
auto auto_array(T1&& _Size, T2&&... _Newsize)
{
auto result = new decltype(auto_array(_Newsize...))[_Size];
for (int64_t i = 0; i < _Size; ++i) {
result[i] = auto_array(_Newsize...);
}
return result;
}
template <class T1, class T2>
void delete_auto_array(T1&& ptr, T2&&)
{
delete[] ptr;
}
template <class T1, class T2, class... T3>
void delete_auto_array(T1&& ptr, T2&& _Size, T3&&... _Newsize)
{
for (int64_t i = 0; i < _Size; ++i) {
delete_auto_array(ptr[i], _Newsize...);
}
delete[] ptr;
}
int main() {
auto _Tor = auto_array(3, 2, 7);
delete_auto_array(_Tor, 3, 2, 7);
return 0;
}