在数组中的同一位置赋值
Assigning value at same position in an array
我有代码:
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
你的例子属于第二种情况。
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 标准库类型的赋值运算符的引用限定符
- 关于 c++ 函数中指针赋值的简单问题
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- 复制 ctor 和复制赋值运算符 const 关键字位置
- 在数组中的同一位置赋值
- 为什么赋值不会使对象指向相同的位置