Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

EcaFaYn!

Frischling

  • »EcaFaYn!« ist der Autor dieses Themas

Beiträge: 62

Wohnort: NRW

Beruf: Azubi + Student

  • Private Nachricht senden

1

24.01.2010, 15:58

Wie behandle ich Arrays als Elemente einer Klasse?

Guten Tag,

Ich bin gerade auf eine Situation gestoßen, bei der ich ins Grübeln geraten bin. Ich habe in einem Programm eine Klasse, die auch eindimensionale und mehrdimensionale Arrays beinhaltet.
Da ich ich natürlich lernen möchte, "sauberen" Code zu schreiben, habe ich diese als privat deklariert und Zugriffsmethoden darauf geschrieben.
Aber Arrays kann man ja nicht zurückgeben, also habe ich die Arrays im Heap erstellt und Zeiger darauf deklariert.
Nur erscheint mir dies, vor allem bei den multidimensionalen Arrays, ziemlich umständlich und fehleranfällig.
Was ist denn der sinnvollste Umgang mit Arrays als Klassenelemente? Gibt es da eine andere Lösung?
Falls mehr Informationen benötigt werden, fragt einfach danach.

Schon einmal danke,

Gruß, Eca
On the grind - Supersci

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

24.01.2010, 16:03

Der wahrscheinlich beste Umgang mit nativen Arrays ist der sie nicht zu benutzen. ;)

Es gibt bessere Alternativen, welche sich einiges besser eignen, als native Arrays. Wenn es dynamisch sein soll gibt es std::vector. Wenn du die Grösse zur Kompilierungszeit bereits weisst, dann gibt es boost::array oder std::tr1::array, was eigentlich das gleiche ist, wie die Variante von boost, aber halt dann im nächsten Standard zur Sprache gehören wird.

Es gibt also eigentlich keinen Grund native Arrays zu benutzen. Geschwindigkeitsgedanken musst du dir auch keine machen, da Zugriff auf std::vector ist unmerklich wenig grösser, als auf native Arrays und im Falle von boost::array hast du keinen Overhead mehr.
Das einzige, worauf du dich achten solltest ist halt, dass eine Kopie eines solchen Containers teuer werden kann, weil bei einer Kopier tatsächlich der Container kopiert wird (also jedes Element).

EcaFaYn!

Frischling

  • »EcaFaYn!« ist der Autor dieses Themas

Beiträge: 62

Wohnort: NRW

Beruf: Azubi + Student

  • Private Nachricht senden

3

24.01.2010, 17:24

Danke für die Antwort. std::vector war bis dato das einzige, das ich noch kannte, und die Größen sind konstant, von daher kam mir das wie ein "overkill" vor :p

Aber wie genau kann ich denn bei boost::array die Zugriffsfunktionen definieren, denn wenn du meinst, dass Kopien vermieden werden sollten, wäre das schlichte zurückgeben des Arrays ja genau das Falsche, oder nicht?

Ich muss mich erst wieder in die ganze Materie einarbeiten nach einer erneuten langen Pause, deshalb muss man ein bisschen Geduld mit mir haben ;)
On the grind - Supersci

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

24.01.2010, 17:30

Schlichtweg falsch ist es nicht, aber du kannst du halt auch überlegen, ob es in gewissen Fällen nicht besser ist eine konstante Referenzu zurückzu geben.

Aber ich meinte halt damit, dass du das einfach im Hinterkopf behalten kannst, dass da halt viel kopiert werden muss. Aber wenn du eine Kopier brauchst, dann mach halt eine. Wahrscheinlich spielt es eh keine Rolle.

Werbeanzeige