Zolo Skrevet 1. februar 2007 Skrevet 1. februar 2007 Har en klasse: f.eks class MyClass . . så oppretter eg objekter MyClass *ob1 = new MyClass(variable1, osv); Det eg ønsker da er å kunne ta og gjøre følgende MyClass *obj2 = ob1; Dette fungerer, men om eg forandrer på ob1 så blir samme forandringene gjort på obj2. Har en kopikonstuktor, men er itvil om det er nok. Dersom det er nok så har eg en bug i den
Giddion Skrevet 1. februar 2007 Skrevet 1. februar 2007 MyClass *obj2 = ob1; 7849089[/snapback] Burde fungere det, men det kommer ann på hvordan klassen din er bygg, eller rettere sagt åssen variabler du har i klassen. Du nevner en kopikonstuktor og det burde holde, men det kommer som sagt ann på hvordan klassen din ser ut.. eks. obj1 inneholder en peker til variabel 1 man kopierer obj1 til obj2, men obj2 har en peker som peker til noen av de samme dataene som obj1 også har. Hvis du poster variablene dine og eventuelt også kopikonstuktoren din så skal du nok få hjelp.
Zolo Skrevet 1. februar 2007 Forfatter Skrevet 1. februar 2007 Klassen class MatrixImage{ public: MatrixImage(); MatrixImage(char* filename); MatrixImage(const MatrixImage &mi); ~MatrixImage(); //void operator=(const MatrixImage &mi); unsigned char* getImageData(); void insert(int row, int col, double value, int channel); double getValue(int row, int col, int channel); int getRow(); int getCol(); void writeImage(char* filename); private: typedef struct{ unsigned char red; unsigned char green; unsigned char blue; }colorPixel; imageRGB image; colorPixel* colorImage; }; Kopikonstruktor: MatrixImage::MatrixImage(const MatrixImage &mi){ image.height = mi.image.height; image.width = mi.image.width; delete image.data; image.data = new uchar[mi.image.height*image.width*3]; memcpy(image.data, mi.image.data, (image.height*image.width*3)); colorImage = (colorPixel*) image.data; //memcpy(colorImage, mi.colorImage, (mi.image.width*mi.image.height*3)); } Måtte jo prøve litt mer selv først, men det ble ikke bedre.
Dead_Rabbit Skrevet 1. februar 2007 Skrevet 1. februar 2007 The rule of three. Copy constructor, assignment operator og destructor. Hvis du har medlemmer som allokeres dynamisk, bør du i nesten alle tilfeller ha en copy constructor, assignment operator og en destructor. Google «the rule of three».
Ric_H Skrevet 1. februar 2007 Skrevet 1. februar 2007 MyClass *ob1 = new MyClass(variable1, osv); MyClass *obj2 = ob1; Dette fungerer, men om eg forandrer på ob1 så blir samme forandringene gjort på obj2 Det er ikke så rart, fordi du oppretter her obj2 som en peker til et objekt av typen MyClass, og setter denne lik pekeren ob1. Altså peker du til samme objekt, så om du bruker pekeren ob1 eller obj2 spiller ingen rolle. Du bør bruke en copy constructor, eller så kunne du vel omformulert koden over til: MyClass *ob1 = new MyClass(variable1, osv); MyClass *obj2 = new MyClass(); *obj2 = *ob1; delete ob1; delete obj2;
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå