c++ - 大括号初始化和复制初始化动态分配的对象之间的区别
问题描述
这可能是微不足道的,但我无法正确命名它,因此我找不到答案。
1和2性能之间有什么显着差异吗?
class Object {
int number_;
Object(int number) : number_(number) {}
};
// then, in main.
Object* objPtr1 = new Object(11) // nr.1
Object* objPtr2 {new Object{11}} // nr.2
据我了解,2 的唯一好处objPtr2
是直接使用动态创建的对象的地址进行初始化,因此不涉及复制。
另一方面objPtr1
正在复制初始化,这意味着:
- 运算符
new
返回新创建对象的地址, - 地址正在复制到
objPtr1
。
这个过程涉及不必要的复制,可以通过直接初始化来省略(如2)。如果我的理解是正确的,那么使用 2 比 1 对性能有很大影响吗?
解决方案
推荐阅读
- javascript - 表单自定义单选按钮添加活动类以更改背景
- css - ng5-slider - 我们如何更改活动滑块的背景颜色?
- amazon-quicksight - 通过来自其他数据集的多个值过滤 Quicksight 数据集
- java - E/StorageException:发生了 StorageException。对象在该位置不存在。在 Firebase 安卓工作室
- python - 在没有 sudo 的情况下运行需要 /dev/mem 权限的 Python 脚本
- python - 如何使用 Python 将 128 位 AES 加密密钥转换为字符串?
- c - 用于记录目的的数字文件标识符,如 __FILE__
- sql-server - SQL Server - 差距和孤岛
- css - 为什么 Safari 视口不能溢出?
- java - 如何从数字列表中随机填充多个 TextView?