如何解决大括号初始化和动态分配对象的复制初始化之间的区别
这可能很琐碎,但我无法正确命名,因此找不到答案。
在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上使用2是否对性能有很大的影响?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。