1. 拷贝构造函数
- 定义:
FourByteStruct(const FourByteStruct &fourByteStruct)
- 调用时机:
- 当初始化一个对象时使用另一个相同类型的对象。例如:
FourByteStruct obj1; // 默认构造
FourByteStruct obj2 = obj1; // 拷贝构造
- 当将一个对象作为参数以值传递(通过拷贝来创造一个形参副本)。
void func(FourByteStruct fs);
func(obj1); // 调用拷贝构造函数
- 在返回一个对象时(除了移动对象的情况):
FourByteStruct func() {
FourByteStruct localObj;
return localObj; // 需要拷贝构造一个返回值(在不使用移动语义的情况下)
}
2. 拷贝赋值运算符
- 定义:
FourByteStruct &operator=(const FourByteStruct &fourByteStruct)
- 调用时机:
3. 移动构造函数
- 定义:
FourByteStruct(FourByteStruct &&fourByteStruct) noexcept
- 调用时机:
4. 移动赋值运算符
- 定义:
FourByteStruct &operator=(FourByteStruct &&fourByteStruct) noexcept
- 调用时机:
具体实现
// 拷贝构造函数
FourByteStruct(const FourByteStruct &fourByteStruct) : byte(fourByteStruct.byte),
value_uint32_t(fourByteStruct.value_uint32_t) {}
// 拷贝赋值函数
FourByteStruct &operator=(const FourByteStruct &fourByteStruct) {
if (this != &fourByteStruct) {
this->byte = fourByteStruct.byte;
this->value_uint32_t = fourByteStruct.value_uint32_t;
}
return *this;
}
// 移动构造函数
FourByteStruct(FourByteStruct &&fourByteStruct) noexcept
: byte(std::move(fourByteStruct.byte)), value_uint32_t(fourByteStruct.value_uint32_t) {
fourByteStruct.value_uint32_t = 0;
}
// 移动赋值运算符
FourByteStruct &operator=(FourByteStruct &&fourByteStruct) noexcept {
if (this != &fourByteStruct) {
this->byte = std::move(fourByteStruct.byte);
this->value_uint32_t = fourByteStruct.value_uint32_t;
fourByteStruct.value_uint32_t = 0;
}
return *this;
}