在数组中的同一位置赋值

Assigning value at same position in an array

本文关键字:位置 赋值 数组      更新时间:2023-10-16

我有代码:

T x,y;
T* t = new T[10];
t[0] = x;
t[0] = y;

发生的情况:new T[10]使数组调用默认构造函数。

t[0]是取消引用的指针?因此,如果我分配值x,则复制x(调用T复制构造函数);

接下来,如果我将y值分配到相同的位置,则调用下一个复制构造函数或赋值运算符?旧价值是否被适当地销毁?

在您的示例中:

T* t = new T[10];

调用T的默认构造函数(10次)。然后

t[0] = x;

调用赋值运算符。此语句不调用构造函数。

T* t = new T[10];

通过调用T的默认构造函数,在自由存储(堆)上创建T类型的10对象
请注意,使用new时,始终在Freestore上创建对象。

分配时,

t[0] = x;   

调用复制分配运算符(=),也称为分配。这里既没有调用构造函数,也没有调用复制构造函数。

为了简单起见,请记住以下规则:

  • 当在同一语句中创建并分配对象时,将使用复制构造函数。这就是所谓的复制初始化

示例:

   Myclass obj1;
   Myclass obj2 = obj1;  //obj2 is Created & Initialized in same statement
  • 当一个对象已经在前一个语句中创建,并在另一个语句中将其赋值(=)时,将调用赋值运算符

示例:

   Myclass obj1;      //obj1 is created
   Myclass obj2;      //obj2 is created
   obj2 = obj1;       //Already created object obj2 is assigned with obj1

你的例子属于第二种情况。