[C++] overloading comma-operator

Pagina: 1
Acties:

  • JeromeB
  • Registratie: September 2003
  • Laatst online: 29-12-2025
Ik heb een std::vector<double>-wrapper en een vector-initializer geschreven die mij de mogelijkheid geven de comma-operator te overloaden om zo makkelijk data in een std::vector<double> te pushen.

De classes:
C++:
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
28
29
class vinit // vector-initializer
{
    std::vector<double>* data;

    public:

    vinit(std::vector<double>* data)
    {
        this->data = data;
    }

    vinit operator,(const double& number)
    {
        data->push_back(number);
        return vinit(data);
    }
};

struct vector // std::vector<double>-wrapper
{
    std::vector<double> data;

    vinit operator=(const double& number)
    {
        data.resize(0);
        data.push_back(number);
        return vinit(&data);
    }
};


Het programma:
C++:
1
2
3
vector vec;
vec = 1,2,3,4;
vec = 1;


Als ik het programma uitvoer verwacht ik dat vec.data één double bevat (1), maar vec.data bevat twee doubles (1 en 2). Waarom is dat zo?

PC load letter? What the fuck does that mean?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik denk dat je verkeerd kijkt, of je compiler is stuk :)
Als ik je code uitvoer bevat vec.data daarna maar 1 element.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • JeromeB
  • Registratie: September 2003
  • Laatst online: 29-12-2025
Inderdaad, ik heb verkeerd gekeken. vec.data.size() is inderdaad 1, maar de tweede, de derde en de vierde doubles zijn nog wel toegankelijk als ik ze opvraag middels vec.data[index].

[ Voor 4% gewijzigd door JeromeB op 29-06-2006 17:04 ]

PC load letter? What the fuck does that mean?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

De gangbare resize() implementatie van vector alloceert ook geen nieuwe buffer als hij klenier wordt, en aangezien een int geen destructor heeft blijven die waarden gewoon in het geheugen staan.

[ Voor 7% gewijzigd door .oisyn op 29-06-2006 17:18 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • JeromeB
  • Registratie: September 2003
  • Laatst online: 29-12-2025
Maar worden die elementen dan helemaal niet opgeruimd (en heb ik dan een memory-leak) of worden ze gewoon opgeruimd als vec ook wordt opgeruimd?

PC load letter? What the fuck does that mean?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

Uiteraard kun je van een stl container verwachten dat hij al het geheugen opruimt wat hij zelf ook gealloceerd heeft als hij gedestruct wordt.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • JeromeB
  • Registratie: September 2003
  • Laatst online: 29-12-2025
ok, bedankt voor de uitleg :)

PC load letter? What the fuck does that mean?

Pagina: 1