如何在复制控制函数中处理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::copystd::uninitialized_copymemcpymemmove或什么?


这是标准在12.8(复制类对象)中所说的。 复制建设:

每个子对象都以适合其类型的方式进行复制:

  • 如果子对象是类类型的,则使用该类的拷贝构造函数;
  • 如果子对象是一个数组,则每个元素都以适合元素类型的方式被复制;
  • 如果子对象是标量类型,则使用内置赋值运算符。
  • 复制作业:

    每个子对象都以适合其类型的方式进行分配:

  • 如果子对象是类类型的,则使用该类的复制赋值操作符(就像通过显式限定;即忽略更多派生类中的任何可能的虚拟重写函数一样);
  • 如果子对象是一个数组,则每个元素都以适合元素类型的方式分配;
  • 如果子对象是标量类型,则使用内置赋值运算符。
  • 链接地址: http://www.djcxy.com/p/72985.html

    上一篇: How are C++ array members handled in copy control functions?

    下一篇: May I take the address of the one