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

  • »Das_Kleine_C++;« ist der Autor dieses Themas

Beiträge: 59

Wohnort: 79104 Freiburg

  • Private Nachricht senden

1

03.07.2007, 14:26

objekte mit vektoren

hi leute,

C-/C++-Quelltext

1
2
vector<CDackel> Dackel(3);
vector<CDackel>::iterator i;

Ich habe gelesen das man zwischen die Pfeile(<>) alle Datentypen schreiben kann.
Bei dem Code hätte ich es für logisch gefunden, das es 3Dackl gibt und 3mal
der konstruktor aufgerufen wird.
Der Konstruktor wird aber nur einmal aufgerufen? :shock:

Mfg
Das_Kleine_C++; 8)

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

2

03.07.2007, 14:50

kann es sein, dass der vektor das element nur einmal erzeugt und so auch nur einem den konstruktor aufruft und noch 2 kopien von dem objekt hat?
"Don't trust your eyes: They are a hell of a lot smarter than you are"

3

03.07.2007, 14:58

wenn du unbedingt willst dass 3mal der Konstruktor aufgerufen wird schreib doch einfach:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
std::vector<CDackel> Dackel;

for(unsigned int = 0; i<3; i++)
{
    CDackel tmp_dackel;
    Dackel.push_back(tmp_dackel);

}


So sollte es gehen ;-)
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

4

03.07.2007, 15:10

Warum willst du den 3 mal den konstruktor aufrufen?

Socke

  • »Das_Kleine_C++;« ist der Autor dieses Themas

Beiträge: 59

Wohnort: 79104 Freiburg

  • Private Nachricht senden

5

03.07.2007, 15:44

ok,
so probier ich es mal,
vielen dank :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

03.07.2007, 16:12

wenn du sowas machst:

C-/C++-Quelltext

1
std::vector<blub> blab(3);


dann wird ein temporäres objekt blub() erzeugt (mit dem default ctor, ctor = konstruktor) und dieses dann 3 mal kopiert (mit dem copy ctor). es wird also der default ctor nur einmal aufgerufen, aber der copy ctor 3 mal ;)

zum ausprobieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <vector>

class blub
{
public:

  blub()
  {
    // default ctor

    std::cout<<"blub ";
  };

  blub(const blub& b)
  {
    // default ctor

    std::cout <<"blub copy ";
  };

};

int main()
{
  std::vector<blub> v(3);

  std::cin.get();
}


warum das so ist, wird klar wenn du dir anschaust wie der verwendete ctor von std::vector deklariert ist:

C-/C++-Quelltext

1
  vector(size_type num, const TYPE& val = TYPE());


das default argument für den zweiten parameter ist der grund:

C-/C++-Quelltext

1
vector<CDackel> Dackel(3);


ist also eigentlich folgendes:

C-/C++-Quelltext

1
vector<CDackel> Dackel(3, CDackel());


wenn du also einen ctor brauchst der 3mal aufgerufen wird, dann nimm z.b. den copy ctor von dackel ;)

bleibt immer noch die frage wofür du das brauchst, denn evtl. gibts einen besseren weg.

Werbeanzeige