Я буду держать его коротким и понятным - для того, чтобы практиковать динамически выделенную память, я решил создать круг, в котором буду хранить его параметры (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;
}
Примечания: 1) 'new int (3)' не делает то, что вы ожидаете от него ('data = new int [3]'). 2) Для каждого 'нового []' вам нужно 'delete []' ('delete [] data'). 3) 'int arr [] = {1,2,3}; int * ptr = arr; delete [] ptr; 'вызывает неопределенное поведение (мнемонический трюк: вы использовали' new [] '? Если вы этого не сделали,' delete [] 'будет ошибочным). – Zeta
http://codereview.stackexchange.com –
@Zeta: Где мнемоника? –