这是我很久以来一直想知道的事情。举个例子:
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
or std::uninitialized_copy
or memcpy
or memmove
或者是什么?
这就是标准 12.8(复制类对象)中所说的内容。复制构造:
每个子对象都以适合其类型的方式复制:
- 如果子对象是类类型,则使用该类的复制构造函数;
- 如果子对象是数组,则以适合元素类型的方式复制每个元素;
- 如果子对象是标量类型,则使用内置赋值运算符。
复制作业:
每个子对象都以适合其类型的方式分配:
- 如果子对象是类类型,则使用该类的复制赋值运算符(就好像通过显式限定;也就是说,忽略更多派生类中任何可能的虚拟重写函数);
- 如果子对象是数组,则以适合元素类型的方式分配每个元素;
- 如果子对象是标量类型,则使用内置赋值运算符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)