C++ 动态分配对象的大括号初始化和副本初始化之间的区别
这一个可能是微不足道的,但我无法正确命名,因此我无法找到答案 1和2在性能方面是否存在显著差异C++ 动态分配对象的大括号初始化和副本初始化之间的区别,c++,c++11,initialization,C++,C++11,Initialization,这一个可能是微不足道的,但我无法正确命名,因此我无法找到答案 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直接用动
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会有很大的不同吗?在这种情况下,您会发现它们的作用完全相同:谢谢您回答@Ted。你让我意识到我可以在几分钟内自己找到答案。至少现在,当我遇到类似的问题时,我知道该使用什么工具了,干杯!通过复制从
new
返回的地址,以相同的方式初始化两个指针。所以,是的,这里涉及到复制,但只涉及到指针,这在这里被认为是微不足道的。