std :: end for unique_ptr <T []>

Yur*_*yma 3 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;
}
Run Code Online (Sandbox Code Playgroud)

但我得到错误错误:C2893:无法使用[_Ty = T [N]]专门化函数模板'T*test :: end(const std :: unique_ptr>&)'使用以下模板参数:'T = int' 'N = 0×00'

看起来不可能推断出N.

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

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

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

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

也许有人知道更好的方法或知道如何使这个工作?

Nat*_*ica 8

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

std::unique_ptr<T[]>只是一个原始指针的包装器.您无法仅通过指针获取指针所指向的块的大小.您使用的原因std::unique_ptr<T[]>T* foo = new T[size]unique_ptr确保delete[]当指针超出范围时调用.