用于动态分配数组的unique_ptr替代方案
unique_ptr alternative for dynamically allocated array
我写了一个类,它必须与一些旧代码接口,这些代码需要一些C样式数组(或者至少是指向第一个元素的指针)作为参数。
这些数组是我类的成员,它们特别大(50kb),所以我想把它们放在堆上,这样我类的对象在堆栈上就不会很大。我非常相信使用资源管理对象,所以我宁愿自己不在堆上管理这些数组。
我发现使用unique_ptr来实现这一点效果特别好。例如:
std::unique_ptr<SOMETYPE[]> someArrayName
和使用:
someArrayName(new SOMETYPE[someLargeSize])
在我的构造函数的初始化列表中。这允许我使用.get()
方法将这些作为正则C数组,用于需要作为参数的函数,并且我不必自己管理内存。但我刚刚意识到,我的同事(实际上是为发布版编译代码的人)仍在使用VS2008,显然缺乏对unique_ptr
等C++0x功能的支持。首先,我目前使用unique_ptr的解决方案是好的吗?如果是这样的话,有没有一个替代品来维持我在助推中所需要的所有行为?
使用std::unique_ptr
需要使用new[]
进行分配。这从来都不是(或者几乎从来都不是)最好的解决方案。在这个情况下,只需使用std::vector
。在C++11之前,通过&array[0],
array.size()
;在C++11中,您可以更加清晰,并通过array.data(), array.size()
。(这还有一个优点您不必对空向量进行特殊处理。)
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- C++11 中不同类型的对象的 std::array 的替代方案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 为共享 ptr 向量实现复制 c'tor?