c++ - std::end for unique_ptr<T[]>

标签 c++ c++11

我想为唯一指针实现 std::end。 问题是我必须得到 N(数组中的元素数)。

1.从模板推导类型

template <typename T, size_t N>
T* end(const unique_ptr<T[N]> &arr)
{
    return arr.get() + N;
}

但我收到错误错误:C2893:无法使用 [ _Ty=T [N] ] 特化函数模板 'T *test::end(const std::unique_ptr> &)' 具有以下模板参数:'T =int' 'N=0x00'

看起来不可能推导出N

2.从分配器中获取N。 分配器必须知道 N 才能正确执行 delete[]。 您可以在 this article 中阅读相关内容.有两种方法:

  1. 过度分配数组并将 n 放在左边。

  2. 使用关联数组,p 为键,n 为值。

问题是如何获得这个大小的跨平台/编译器。

也许有人知道更好的方法或知道如何让它发挥作用?

最佳答案

如果您有一个运行时大小的数组并且您需要知道它的大小而无需手动进行簿记,那么您应该使用 std::vector .它将为您管理内存和大小。

std::unique_ptr<T[]>只是原始指针的包装器。您无法仅从指针获取指针指向的 block 的大小。你使用 std::unique_ptr<T[]> 的原因在 T* foo = new T[size]unique_ptr确保delete[]当指针超出范围时调用。

关于c++ - std::end for unique_ptr<T[]>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40155569/

相关文章:

python - 如何从qt模型中获取所有数据

c++ - 奇怪的 constexpr typeid 错误

c++ - std::promise 能否知道相应的 std::future 已取消等待?

C++11 正则表达式匹配中的匹配

c++ - 错误 'operator*' 不匹配

c++ - 让 std::map 分配器工作

c++ - Qt 我可以在构造函数中将信号/槽连接到自身吗?

c++ - CMake source_group 不适用于 Qtcreator

c++ - C++调用抽象基类的构造函数

c++ - 如何更好地实现这个自 Action 用域模板对象?