| Autor |
Nachricht |
Tantor
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.01.2002
Beiträge: 125
|
Tantor Mitglied
10:54:00 14.05.2003 Titel: |
Problem mit dem operator= ? |
Zitieren |
Hallo zusammen,
also meine Klasse sieht wie folgt aus :
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 | class Spielbrett
{
private:
int AnzahlReihen;
int MaxAnzahlMuenzen;
int* Brett;
int MuenzenAufBrett;
public:
Spielbrett(void);
~Spielbrett(void);
Spielbrett& operator=(const Spielbrett& SBrett);
}; | |
meine Definition für die Überladung so :
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Spielbrett& Spielbrett::operator=(const Spielbrett& SBrett)
{
if ( this != &SBrett )
{
AnzahlReihen = SBrett.AnzahlReihen;
MaxAnzahlMuenzen= SBrett.MaxAnzahlMuenzen;
MuenzenAufBrett = SBrett.MuenzenAufBrett;
Brett = new int[AnzahlReihen];
for ( short i = 0 ; i < AnzahlReihen ; i++ )
{
Brett[i]=SBrett.Brett[i];
}
}
return *this;
} | |
So, wenn ich jetzt in meiner Methode folgendes gesagt habe :
| C++: | | Spielbrett Brett2 = SBrett; | |
und der beim Verlassen der Methode dann Brett2 wegräumen will, ist aufeinmal auch der Inhalt von SBrett weg, kann das sein ?? |
|
|
|
 |
volkard
Moderator
Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 25901
|
volkard Moderator
11:00:00 14.05.2003 Titel: |
|
Zitieren |
| Zitat: | | und der beim Verlassen der Methode dann Brett2 wegräumen will, ist aufeinmal auch der Inhalt von SBrett weg, kann das sein ?? |
ja, schon. du hast nen copy-konstruktor aufgerufen aber nen nen zuweisungsoperator definiert. am zuweisungsoperator ist kein fehler, aber er wird bei ner initialisierung wie "Spielbrett Brett2 = SBrett;" nicht aufgerufen. |
_________________ ewr-dienstleister krankenversicherung
|
|
 |
HumeSikkins
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.08.2000
Beiträge: 11139
|
HumeSikkins Mitglied
11:31:00 14.05.2003 Titel: |
|
Zitieren |
| Zitat: | | am zuweisungsoperator ist kein fehler |
Naja. Also ich sehe einen schmerzhaften und einen den man als Stilfehler abtun könnte. |
_________________ Remember Sturgeon's Law:
"Ninety percent of everything is crap."
and now go visit my Homepage ;-)
|
|
 |
volkard
Moderator
Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 25901
|
volkard Moderator
11:39:00 14.05.2003 Titel: |
|
Zitieren |
mangelnde exceptionfestigkeit und ein speicherloch.
ok, kein fehler, der was mit dem beschriebenen problem zu tun hat.
der eigentliche stilfehler ist, daß für Spielbrett überhaupt new benutzen muß, statt ne array-klasse fürs attribut Brett zu nehmen.
ich wollt's hier noch nicht verraten. |
_________________ ewr-dienstleister krankenversicherung
|
|
 |
Shade Of Mine
Moderator
Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 19011
|
Shade Of Mine Moderator
15:23:00 14.05.2003 Titel: |
|
Zitieren |
/me steht ja auf:
Spielbrett& Spielbrett::operator=(Spielbrett SBrett)
{
swap(SBrett);
}
wobei swap intern nur die member vars tauscht (also nur pointer tausch, statt speicher kopieren)
und mit volkards 'Trick' sieht der copy ctor dann so aus:
Spielbrett::Spielbrett(const Spielbrett& SBrett)
:
Brett(SBrett.Brett),
MuenzenAufBrett(MuenzenAufBrett)
{
}
MaxAnzahlMuenzen bekommt man über Brett.maxSize() und AnzahlReihen kann man auch aus Brett.size() ablesen. (oder ähnliches)
so wird der code schön lokal gehalten und man muss nicht jedesmal n eigenes speicher management schreiben, sondern verwendet jedesmal ein (dem bedürfnis angepasste) Array Klasse. |
_________________ A language that doesn't affect the way you think about programming is not worth knowing.
|
|
 |
volkard
Moderator
Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 25901
|
volkard Moderator
16:39:00 14.05.2003 Titel: |
|
Zitieren |
| Zitat: | Original erstellt von Shade Of Mine:
und mit volkards 'Trick' sieht der copy ctor dann so aus:
Spielbrett::Spielbrett(const Spielbrett& SBrett)
:
Brett(SBrett.Brett),
MuenzenAufBrett(MuenzenAufBrett)
{
}
|
nee. so kompliziert sollte mein code gar nicht sein. |
_________________ ewr-dienstleister krankenversicherung
|
|
 |
Shade Of Mine
Moderator
Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 19011
|
Shade Of Mine Moderator
16:43:00 14.05.2003 Titel: |
|
Zitieren |
| Zitat: | Original erstellt von volkard:
nee. so kompliziert sollte mein code gar nicht sein. |
das geht noch einfacher??
nur her damit bitte!! |
_________________ A language that doesn't affect the way you think about programming is not worth knowing.
|
|
 |
volkard
Moderator
Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 25901
|
volkard Moderator
17:06:00 14.05.2003 Titel: |
|
Zitieren |
|
 |