gpt4 book ai didi

c++ - 指针是指向单个项目还是指向数组?

转载 作者:行者123 更新时间:2023-11-27 22:41:11 25 4
gpt4 key购买 nike

我正在编写一个清理实用程序,它将要清理的项目存储在一个元组中,并在出现错误情况时对元组中的每个项目执行适当的操作。元组中的一些典型项是指向分配在堆上的对象的指针。当我的清理处理程序决定删除这些对象时,它必须知道是应该使用原始删除表达式还是删除表达式的数组形式 (delete[])。我将如何确定元组中的项目是指向单个对象的指针还是指向对象数组的指针。

这是一个sample implementation .以下是与此问题相关的部分:

template<unsigned index, typename... Types>
struct TupleItemDeleter
{
void operator() (std::tuple<Types...>& t)
{
std::cout << "Deleting item at index " << index << std::endl;
delete std::get<index>(t); //HOWTO: delete[] or delete?
TupleItemDeleter<index - 1, Types...>{}(t);
}
};

template<typename... Types>
struct TupleItemDeleter<0, Types...>
{
void operator() (std::tuple<Types...>& t)
{
std::cout << "Deleting item at index 0" << std::endl;
delete std::get<0>(t); //HOWTO: delete[] or delete?
}
};

template<typename... Types>
void deleter(std::tuple<Types...>& t)
{
constexpr auto tupleSize = std::tuple_size<std::tuple<Types...>>::value;
TupleItemDeleter<tupleSize - 1, Types...>{}(t);
}

PS:我试过 std::is_array,它对我没有帮助。

最佳答案

您无法仅从指针判断它是指向单个对象还是指向数组 - 这就是为什么有两种形式的 delete,因为编译器无法判断两者。您需要以其他方式跟踪信息。

由于您已经在使用元组,也许您可​​以在那里存储一个指示器。

关于c++ - 指针是指向单个项目还是指向数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48896833/

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