Copy-Konstruktor und dynamisch reservierten Arrays

Halte ich es kurz und klar - um zu üben dynamisch zugewiesenen Speicher, entschied ich mich zu einem Kreis, in dem ich speichern Sie die Parameter (X und Y der Mittelpunkt und radius Länge) in einen dynamisch zugewiesenen Arrays. Da das array dynamisch allokiert dies bedeutet, dass, um zu stoppen Sie ein Leck habe ich einen Konstruktor implementieren. Es bedeutet auch, dass, um zu vermeiden, dass ein paar andere Fehler, die ich implementieren müssen einen kopierkonstruktor und überlastung der Zuweisungsoperator. (mit so ziemlich den gleichen code) ich glaube, ich habe den Destruktor implementiert einigermaßen gut. Ich brauche ein bisschen Hilfe mit dem copy-Konstruktor, obwohl.

#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;
}
Anmerkungen: 1) new int(3) tun nicht, was Sie erwarten, es zu tun (data = new int[3]). 2) Für jede new[] Sie brauchen eine delete[] (delete[] data). 3) int arr[] = {1,2,3}; int * ptr = arr; delete[] ptr; verursacht Undefiniertes Verhalten (Eselsbrücke: hast du new[]? Wenn Sie nicht, ? delete[] falsch sein).
codereview.stackexchange.com
Wo ist der Merksatz?

InformationsquelleAutor Stanimirovv | 2013-05-25

Schreibe einen Kommentar