在复制控制函数中如何处理C ++数组成员?
这是我想了很久的事情。 以下面的例子:
struct matrix { float data[16]; };
我知道默认的构造函数和析构函数在这个具体的例子中是什么(没有),但是复制构造函数和复制赋值运算符呢?
struct matrix { float data[16]; // automatically generated copy constructor matrix(const matrix& that) : // What happens here? { // (or here?) } // automatically generated copy assignment operator matrix& operator=(const matrix& that) { // What happens here? return *this; } };
它涉及std::copy
或std::uninitialized_copy
或memcpy
或memmove
或什么?
这是标准在12.8(复制类对象)中所说的内容。 复制build筑:
每个子对象都以适合其types的方式进行复制:
- 如果子对象是类types,则使用该类的复制构造函数;
- 如果子对象是一个数组,则每个元素都以适合元素types的方式被复制;
- 如果子对象是标量types,则使用内置的赋值运算符。
复制作业:
每个子对象都以适合其types的方式进行分配:
- 如果子对象是类types的,则使用该类的复制赋值操作符(就像通过明确的限定;即忽略更多派生类中的任何可能的虚拟重写函数);
- 如果子对象是一个数组,则每个元素都以适合元素types的方式分配;
- 如果子对象是标量types,则使用内置的赋值运算符。