我有代码:
T x,y;
T* t = new T[10];
t[0] = x;
t[0] = y;
会发生什么:
new T[10]
使数组调用默认构造函数。
t[0]
是否已取消引用指针?
因此,如果我分配值x
,则会复制x
(调用T
复制构造函数);
接下来,如果我将y
值分配给同一位置,则调用下一个复制构造函数或赋值运算符?旧价值被妥善销毁了吗?
答案 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
您的示例属于第二种情况。