我想为唯一指针实现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 [].您可以在本文中阅读此内容.有两种方法:
过度分配数组并将n放在左侧.
使用关联数组,其中p为键,n为值.
问题是如何获得这个大小跨平台/编译器.
也许有人知道更好的方法或知道如何使这个工作?
如果你有一个运行时大小的数组,你需要知道它的大小,而不必手动进行簿记,那么你应该使用std::vector.它将为您管理内存和大小.
std::unique_ptr<T[]>只是一个原始指针的包装器.您无法仅通过指针获取指针所指向的块的大小.您使用的原因std::unique_ptr<T[]>在T* foo = new T[size]是unique_ptr确保delete[]当指针超出范围时调用.
| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |