设计一个程序,具有拷贝构造、复制构造、移动构造和移动赋值功能的CSample类
时间: 2024-06-04 08:11:23 浏览: 62
c++中拷贝构造函数实例
您好!感谢您的问题。以下是我的回答:
CSample类的设计如下:
class CSample {
public:
// Default constructor
CSample() {
m_pData = nullptr;
m_nDataSize = 0;
}
// Destructor
~CSample() {
if (m_pData) {
delete[] m_pData;
m_pData = nullptr;
m_nDataSize = 0;
}
}
// Copy constructor
CSample(const CSample& other) {
m_nDataSize = other.m_nDataSize;
m_pData = new int[m_nDataSize];
for (int i = 0; i < m_nDataSize; i++) {
m_pData[i] = other.m_pData[i];
}
}
// Move constructor
CSample(CSample&& other) noexcept {
m_nDataSize = other.m_nDataSize;
m_pData = other.m_pData;
other.m_pData = nullptr;
other.m_nDataSize = 0;
}
// Copy assignment operator
CSample& operator=(const CSample& other) {
if (this != &other) {
if (m_pData) {
delete[] m_pData;
m_pData = nullptr;
m_nDataSize = 0;
}
m_nDataSize = other.m_nDataSize;
m_pData = new int[m_nDataSize];
for (int i = 0; i < m_nDataSize; i++) {
m_pData[i] = other.m_pData[i];
}
}
return *this;
}
// Move assignment operator
CSample& operator=(CSample&& other) noexcept {
if (this != &other) {
if (m_pData) {
delete[] m_pData;
m_pData = nullptr;
m_nDataSize = 0;
}
m_nDataSize = other.m_nDataSize;
m_pData = other.m_pData;
other.m_pData = nullptr;
other.m_nDataSize = 0;
}
return *this;
}
private:
int* m_pData;
int m_nDataSize;
};
上述代码中,CSample类包含四个函数:拷贝构造函数、复制构造函数、移动构造函数和移动赋值函数。这些函数的实现方式如下:
拷贝构造函数:将m_pData指向其他对象的数据,创建一个新的m_pData并将其赋值给当前对象。
复制构造函数:将m_pData指向其他对象的数据,创建一个新的m_pData并将其赋值给当前对象。
移动构造函数:将其他对象中的m_pData数据移动到当前对象中,并将其他对象的m_pData指针设为nullptr。
移动赋值函数:将其他对象中的m_pData数据移动到当前对象中,并将其他对象的m_pData指针设为nullptr。
希望我的回答能解决您的问题。如果您还有其他问题,欢迎随时提出!
阅读全文