如何使用类初始化 STL 向量/列表而不调用复制构造函数

2024-04-20

我有一个 C++ 程序,它使用包含类实例的 std::list 。如果我打电话,例如myList.push_back(MyClass(variable));它经历创建临时变量的过程,然后立即将其复制到向量,然后删除临时变量。这远没有我想要的那么高效,而且当您需要深层复制时,这很糟糕。

我希望有我的类的构造函数new一些东西,而不必实现复制构造函数只是为了第二次分配我的内存并浪费运行时间。我也不想立即从向量/列表中找到类实例,然后手动分配内存(或者做一些可怕的事情,比如在复制构造函数本身中分配内存)。

有什么办法可以解决这个问题吗(顺便说一句,我没有使用 Visual Studio)?


C++0x 移动构造函数是部分解决方法:不是调用复制构造函数,而是调用移动构造函数。移动构造函数类似于复制构造函数,只不过它允许使源参数无效。

C++0x 添加another功能将完全满足您的需求:emplace_back。 (N3092 §23.2.3) 将参数传递给构造函数,然后它调用构造函数与这些论点 (by ...和转发),因此无法调用其他构造函数。

对于 C++03,您唯一的选择是向您的类添加未初始化状态。在紧随其后调用的另一个函数中执行实际构造push_back. boost::optional可能会帮助您避免初始化类的成员,但它反过来又需要they可复制构造。或者,正如 Fred 所说,使用最初为空的智能指针来完成同样的事情。

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

如何使用类初始化 STL 向量/列表而不调用复制构造函数 的相关文章

随机推荐

  • 具有数百个字段的 Django 模型

    我有一个具有数百个属性的模型 属性可以是不同的类型 整数 字符串 上传的文件 我想从最重要的属性开始逐步实现这个复杂的模型 我可以想到两个选择 将属性定义为常规模型字段 定义一个单独的模型来分别保存每个属性 并使用ForeignKey 我还
  • 当文本模糊时,Android BlurMaskFilter 在 canvas.drawOval 中没有任何效果

    我一直在尝试创建一个自定义视图 其文本下的形状模糊 问题是 BlurMaskFilter 对我在画布上绘制的任何形状没有影响 以下是我在构造函数中初始化 Paint 对象的方法 paint new Paint 0 paint setColo
  • HTML:光标显示在只读输入文本中?

    假设我们有一个只读的文本框 如下所示
  • 如何裁剪 PDF 页面

    谁能帮助我 如何像 Acrobat Professional 那样剪切 PDF 页面 This snippet http osdir com ml windows dotnet itextsharp general 2008 09 msg0
  • 使网格正确对齐

    在我的应用程序中 我在列表框中显示有关用户的一些信息 我已经得到了我想要的大部分东西 但布局有点困扰我 它由网格制成 因此可以重新调整大小并适合纵向 横向模式 However I cannot get the layout to fix i
  • TensorFlow 队列关闭后可以重新打开吗?

    我想将项目入队 关闭队列以确保其他会话将所有剩余项目出队 然后在下一个纪元稍后重新打开它 这可能吗 q tf FIFOQueue close q q close reopen q with tf Session as sess sess r
  • Selenium Webdriver:处理 NoSuchElementException 的最佳实践

    经过大量搜索和阅读后 我仍然不清楚使用 Webdriver 处理失败断言的最佳方法 我本以为这是一个常见且核心的功能 我想做的就是 寻找一个元素 如果在场 告诉我 如果不在场 告诉我 我想向非技术受众展示结果 因此让它抛出带有完整堆栈跟踪的
  • 使用 CSS 和 JS 创建金字塔

    我有一个包装 div 和许多内容块 内容块可以是任意数量 div class wrapper div class content block Something goes here div div class content block S
  • 使用通用字典和/或使用 IDictionary 排序

    我有一个字典 其中的值是在运行时确定的 我可以将其创建为IDictionary并添加到它很好 但我无法排序 有没有办法将其创建为Dictionary这样我就可以访问OrderBy或者是否有另一种方法将其排序为IDictionary void
  • Symfony 控制器中操作的含义

    我是 Symfony 框架的新手 我在 Symfony 中启动简单项目 我在控制器中定义了一个函数 例如 public function sampleAction 这里的Action是什么意思 这只是一个约定 在其他框架中也是如此 例如 Z
  • iOS核心运动检测向前/向后倾斜

    我正在使用 iOS 核心运动框架来检测设备是否向前或向后倾斜 详情请看图片 https i stack imgur com 2Ojw5 jpg https i stack imgur com 2Ojw5 jpg 使用俯仰值 a 可以检测到这
  • 如何正确设置 hellem.js 来解决 CSP 问题?

    当我启动 Express 应用程序时 浏览器会出现以下错误 Refused to load the script http localhost 1337 main js because it violates the following C
  • Laravel 默认 .htaccess 文件将不起作用

    我终于为 Laravel 安装了所有内容 但我的主页上出现错误 500 它看起来是我的 htaccess 文件 如果我删除它 页面就可以工作 如果我把它放回去 又会出现500错误
  • 使用自定义 http 标头进行 Spring MVC 重定向

    我正在开发小型 spring mvc 应用程序 其中用户需要使用一些 http 标头重定向到外部应用程序 例如说 用户正在 url 上的应用程序 1 上http localhost 8080 app1 http localhost 8080
  • 长时间运行进程的超时和 Windows 服务 (Python)

    我有一个使用 python 创建的简单 Windows 服务 我的问题是 我不知道该服务需要多长时间才能完成 可能需要 15 秒 也可能需要 4 个多小时 具体取决于需要对数据执行的操作 4个多小时的情况很少见 但我也遇到过这种情况 以下是
  • UNIX:用冒号替换换行符,在 EOF 之前保留换行符

    我有一个格式为的文本文件 INPUT txt A
  • MVC 3 - 使用列表类型属性绑定到复杂类型

    我有一个以下视图模型 它将由我正在开发的搜索控件使用 public class SearchViewModel public SearchViewModel SearchLocation new SearchLocationViewMode
  • Qt 5 和 OS X Mavericks 问题

    我正在使用 Cmake 在 OS X 10 9 上构建 QT 项目 自 Mavericks 以来 OpenGL 标头的位置似乎发生了变化 文件夹 System Library Frameworks OpenGL framework Head
  • 修复地图投影后形状不连续的多边形对象

    该演示程序 旨在在 IPython 笔记本中运行 您需要matplotlib mpl toolkits basemap pyproj and shapely 应该在地球表面绘制越来越大的圆圈 只要圆不越过其中一根极点 它就能正常工作 如果发
  • 如何使用类初始化 STL 向量/列表而不调用复制构造函数

    我有一个 C 程序 它使用包含类实例的 std list 如果我打电话 例如myList push back MyClass variable 它经历创建临时变量的过程 然后立即将其复制到向量 然后删除临时变量 这远没有我想要的那么高效 而