在数组中的相同位置分配值

时间:2012-02-07 09:31:00

标签: c++

我有代码:

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

会发生什么: new T[10]使数组调用默认构造函数。

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

接下来,如果我将y值分配给同一位置,则调用下一个复制构造函数或赋值运算符?旧价值被妥善销毁了吗?

2 个答案:

答案 0 :(得分:7)

在你的例子中:

T* t = new T[10];

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

t[0] = x;

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

答案 1 :(得分:2)

T* t = new T[10];

通过调用10的默认构造函数,在freestore(Heap)上创建T类型的T个对象。 请注意,当您使用new时,总是在Freestore上创建对象。

分配时,

t[0] = x;   

调用复制赋值运算符(=)a.k.a赋值。此处不调用构造函数和复制构造函数。

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

  • 当创建对象并将其分配到同一语句中时,将使用复制构造函数。这称为复制初始化。

示例:

   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

您的示例属于第二种情况。