Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

c++: frage zu arrays

Yves3 / 11 Antworten / Flachansicht Nickles

hallo


ich hab mal wieder eine frage zu c++ ;-) der erste quellcode ist aus meinem programmierbuch. warum wird dort der zeiger "pCat" verwendet? was ist an meiner lösung(source 2) anders? warum wurde das im buch nicht so gelöst?


danke für alle antworten!


<b>source 1:</b>


#include <iostream.h>


class CAT
{
public:
 CAT() { itsAge = 1; itsWeight = 5; }
 ~CAT();
 int GetAge() const { return itsAge; }
 int GetWeight() const { return itsWeight; }
 void SetAge(int age) { itsAge = age; }


private:
 int itsAge;
 int itsWeight;
};


CAT::~CAT()
{
// cout << "Destruktor aufgerufen!\n";
}


int main()
{
 CAT * Family = new CAT[500];
 int i;
 CAT * pCat;
 <b> 


for(i = 0; i<500 ; i++)
 {
  pCat = new CAT;
  pCat->SetAge(2*i +1);
  Family[i] = *pCat;
  delete pCat;
 }</b>


 for(i = 0; i<500; i++)
  cout << "Katze#" << (i+1) << ": " << Family[i].GetAge() << endl;


 delete [] Family;


 return 0;
}


<b>source 2</b>


#include <iostream.h>


class CAT
{
public:
 CAT() { itsAge = 1; itsWeight = 5; }
 ~CAT();
 int GetAge() const { return itsAge; }
 int GetWeight() const { return itsWeight; }
 void SetAge(int age) { itsAge = age; }


private:
 int itsAge;
 int itsWeight;
};


CAT::~CAT()
{
// cout << "Destruktor aufgerufen!\n";
}


int main()
{
 CAT * Family = new CAT[500];
 int i;
 <b>
 for(i = 0; i<500 ; i++)
 {


  Family[i].SetAge(2*i +1);


 }</b>


 for(i = 0; i<500; i++)
  cout << "Katze#" << (i+1) << ": " << Family[i].GetAge() << endl;


 delete [] Family;


 return 0;
}

bei Antwort benachrichtigen
Kleine Ergänzung vergisses
Yves3 vergisses „Kleine Ergänzung“
Optionen

"Family[i] = *pCat;
ist bedenklich, da dort die Speicheradresse,
auf die *pCat zeigt, kopiert wird und in der Folgezeile
das *pCat Objekt wieder gelöscht wird."

pCat wird doch dereferenziert, es wird also das CAT objekt als wert übergeben und nicht die adresse des zeigers. daher sollte es meiner meinung nach eigentlich nicht bedenklich sein. oder liege ich da falsch?

bis jetzt war in diesem buch ziemlich gut beschrieben, warum etwas so und nicht anders gemacht wird. ich vermute, dass da noch ein "tieferer sinn" dahinter ist.

bitte korrigiere mich, wenn ich da etwas falsch verstanden habe.
danke für deine antwort

bei Antwort benachrichtigen
Kleine Ergänzung mr.escape
Kleine Ergänzung Yves3
Kleine Ergänzung vergisses
Kleine Ergänzung mr.escape
Kleine Ergänzung vergisses
Kleine Ergänzung mr.escape
Kleine Ergänzung vergisses