复制初始化和直接初始化在C ++之间有区别吗?
复制初始化可以使用复制构造函数的概念来完成。众所周知,构造函数用于初始化对象。我们可以创建副本构造函数来制作其他对象的副本,换句话说,用另一个对象的值初始化当前对象。另一方面,可以使用赋值操作完成直接初始化。
这两种初始化类型之间的主要区别在于,副本初始化为新对象创建了一个单独的存储块。但是直接初始化不会增加新的内存空间。它使用引用变量指向前一个存储块。
复制构造函数或复制初始化(语法)
classname (const classname &obj) {//构造函数的主体
}
直接初始化或赋值运算符(语法)
classname Ob1, Ob2;Ob2 = Ob1;
让我们看看复制初始化和直接初始化之间的详细区别。
复制初始化 | 直接初始化 |
---|---|
复制初始化基本上是一个重载的构造函数 | 可以使用赋值运算符直接进行初始化。 |
这将使用现有对象初始化新对象 | 这会将一个对象的值分配给两个都已经存在的对象。 |
在使用现有对象创建新对象时使用复制初始化 | 当我们想要将现有对象分配给新对象时使用。 |
这两个对象使用单独的内存位置。 | 使用了一个存储位置,但是不同的引用变量指向同一位置。 |
如果在类中未定义副本构造函数,则编译器将提供一个副本构造函数。 | 如果赋值运算符未过载,则将按位复制 |
以上是 复制初始化和直接初始化在C ++之间有区别吗? 的全部内容, 来源链接: utcz.com/z/347361.html