在 C++03 中返回 `std::auto_ptr` 集合之类的内容的最佳方法是什么?

2024-04-19

std::auto_ptr不允许存储在STL容器中,例如std::vector。但是,有时我需要返回多态对象的集合,因此我无法返回对象向量(由于切片问题)。我可以用std::tr1::shared_ptr并将它们粘贴在vector,但随后我必须付出高昂的代价来维护单独的引用计数,并且拥有实际内存(容器)的对象在逻辑上不再“拥有”对象,因为可以将它们复制出来而不考虑所有权。

C++0x 为这个问题提供了完美的解决方案,形式为std::vector<std::unique_ptr<t>>,但我无法访问 C++0x。

其他一些注意事项:

  • 我无法访问 C++0x,但我有 TR1 可用。
  • 我想避免使用 Boost(尽管如果没有其他选择,它是可用的)
  • 我知道boost::ptr_container容器(即boost::ptr_vector),但我想避免这种情况,因为它会破坏调试器(内部结构存储在void *s 这意味着很难在调试器中查看实际存储在容器内的对象)

我要做的就是封装一个本机堆数组。您可以定义您可以支持的向量接口的任何子集,而无需可复制性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++03 中返回 `std::auto_ptr` 集合之类的内容的最佳方法是什么? 的相关文章

随机推荐

  • JavaFx 如何避免创建一个巨大的控制器

    我在 JavaFX 中有一个应用程序 它有带有菜单和工具栏的主场景 以及在按下菜单按钮之一后注入到该主场景中的较小场景 现在 HomeCntroller 负责场景组件 主场景 带有工具栏和菜单 和注入场景 如果注入的场景数量超过一个 这会导
  • kotlin 中的 init 块和构造函数有什么区别?

    我已经开始学习 Kotlin 了 我想知道之间的区别init块和constructor 这之间有什么区别以及我们如何利用它来改进 class Person constructor var name String var age Int va
  • 搭建控制器时引发的调用目标已引发异常

    我创建了一个单独的类库项目来存储数据库上下文和模型类 在同一解决方案中 我创建了一个 ASP NET MVC 项目并引用了类库项目 并在项目的 Web config 文件中包含了数据库上下文的连接字符串 但是 当我尝试添加控制器 带有视图
  • NIntegrate - 为什么在这种情况下 Mathematica 8 的速度要慢得多?

    我有一个 Mathematica 代码 我必须在数值上评估数千个与此类似的积分 NIntegrate Pi Cos Pi 2 x y 1 y 1 y Sin 2 Pi x 1 y Sin Pi 2 x y 1 y E x 1 y x 0 1
  • 如何在“系统偏好设置 > 键盘 > 修饰键...”中更改修饰键

    我需要以编程方式更改 系统偏好设置 gt 键盘 gt 修饰键 中的 Caps Lock Control Option 和 Command 键的值 我不想使用 AppleScript 有人能指出我正确的方向吗 这是 applescript c
  • 为什么使用 --follow 和 --reverse 的 git log 仅返回最后一次提交?

    我想从头开始反向查看文件的所有提交 我跑了 git log reverse file 它按预期工作 但对于重命名的文件 它仅显示重命名的提交 因此我在其中添加了 follow git log reverse follow file 但它现在
  • AntiForgeryToken 在 ASP.Net MVC 4 RC 中已弃用

    我刚刚安装了 ASP Net MVC 4 RC 来替换 ASP Net MVC 4 beta 当尝试运行现有应用程序时 我收到一条错误消息 AntiForgeryToken已被弃用 这是我的代码 using Html BeginForm F
  • 在 JavaScript 中创建 1..20 整数数组的最简洁方法

    创建此数组的最简洁方法是什么 var x 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 例如 一个for loop var x for var i 1 i lt 20 i x push
  • PHP:对象上的递归 htmlspecialchars

    我想为来自不同来源的数据建立一个通用的清理程序 对于清理 我的意思是 在这个阶段 将 htmlspecialchars 应用于字符串 现在 来自这些源的数据可以是任何东西 从对象到数组再到字符串 都是嵌套的 而且很复杂 并且格式总是有点不同
  • java.lang.IllegalArgumentException:无效的 URL:未知协议:f

    我需要编写一个程序来在javafx场景中显示图片 我使用ImageView来显示它 但我遇到了一个问题 线程 main 中的异常 java lang IllegalArgumentException 无效的 URL 未知协议 f 引起原因
  • 如何禁用 onclick 事件

    如何禁用 onclick 事件 我试过了onclick this disabled true 但它不起作用 这是一个 HTML 表格 table tr td Available td td Available td tr tr td div
  • 动画 div 高度一个接一个 onload javascript

    我已经成功地开始了我的动画工作 现在我希望其余的动画在每个动画之后稍微延迟div高度动画及其引起的问题 我尝试过使用getElementsByClassName但这并没有奏效 我已经发布了到目前为止的进展here https codepen
  • 重写 bool 抽象方法时出错

    我不明白为什么我的派生类中会出现此错误来覆盖方法布尔值 public class HotRod Racer private bool blower true false public HotRod public HotRod string
  • Node.js 和 C/C++ 集成:如何正确实现回调?

    我正在尝试实现一个与 Node js 集成的 C 扩展 该扩展将在内部调用一些阻塞调用 因此它需要为 Node js 世界提供一个非阻塞接口 如指定https nodejs org api addons html https nodejs
  • 防止 GNU make 在环境变量中扩展美元符号

    有没有办法让 GNU Make 在环境变量中按字面意思解释美元符号 获取这个 makefile echoFOO echo FOO 像这样运行它 FOO a bc make echo ac ac 我希望它能从字面上回应 a bc 但我找不到一
  • 在客户端 API 中使用 JWT 令牌

    我在 NET5 中有一个 API 使用 JWTBearer 来保护 API 现在我想配置我的客户端应用程序以使用从 api gettoken 生成的令牌 它在 swagger 中工作得很好 但我不知道如何配置我的 MVC 和 API 消费
  • UIScrollView:缩放后内容偏移计算

    有人可以建议在 UIScrollView 放大后使用哪个公式来计算内容偏移吗 让我们考虑以下示例 我有一个 UIScrollView 内容视图的大小为 1000 1000 那么如果我以编程方式setZoomScale到 2 0 并在scro
  • Riak:如果目标被删除,链接会消失吗?

    当从商店中删除商品时 链接到现在丢失的商品的所有文档中的链接是否会自动删除 或者我们是否遇到过类似于 HTML 页面上损坏的链接的情况 不 链接不会自动删除 链接只是与对象一起存储的元数据 因此要查找链接到已删除对象的所有对象 您需要遍历整
  • 检查服务器上文件的差异

    我的机器上有一个存储库的工作副本 并且我知道它已在服务器上更新 我想知道如何通过使用来获取新版本和工作副本中的版本之间的差异svn命令行参数 我有办法做到这一点吗 工作副本是修订版 BASE 存储库中的最新副本是修订版 HEAD 这会将您的
  • 在 C++03 中返回 `std::auto_ptr` 集合之类的内容的最佳方法是什么?

    std auto ptr不允许存储在STL容器中 例如std vector 但是 有时我需要返回多态对象的集合 因此我无法返回对象向量 由于切片问题 我可以用std tr1 shared ptr并将它们粘贴在vector 但随后我必须付出高