我将保持简短明了 - 为了练习动态分配的内存,我决定制作一个圆圈,我将在其中将它的参数(中心的 X 和 Y 以及半径长度)存储在一个动态分配的数组中。由于数组是动态分配的,这意味着为了阻止泄漏,我必须实现一个构造函数。这也意味着为了避免其他几个错误,我需要实现一个复制构造函数并重载赋值运算符。(使用几乎相同的代码)我认为我已经很好地实现了析构函数。不过,我确实需要一些关于复制构造函数的帮助。
#include <iostream>
using namespace std;
class Circle
{
private:
int* data;
public:
Circle(){
cout <<"I am the default constructor" << endl;
data = NULL;
}
Circle(int* p){
cout <<"I am the set up constructor" << endl;
data = p;
}
~Circle(){
cout <<"I am the destructor" << endl;
delete data;
}
Circle& operator=(const Circle& tt1){
cout << "Overloaded assignment operator reporting in!" << endl;
if(this != &tt1){
//free old data
delete this->data;
data = new int(3);
*data = *(tt1.get_data());
*(arr+1) = *(tt1->get_data()+1);
*(arr+2) = *(tt1->get_data()+2);
return *this;
}
}
Circle(const Circle& tt1){
cout << "I am the copy constructor!" << endl;
if(this != &tt1){
//free old data
delete this->data;
data = new int(3);
*data = *(tt1.get_data());
*(arr+1) = *(tt1->get_data()+1);
*(arr+2) = *(tt1->get_data()+2);
return *this;
}
}
};
int main(){
//is this object constructed well?
int arr [] = { 16, 2, 7};
Circle a(arr);
return 0;
}