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.