[ StefanJer91 @ 26.07.2008. 11:53 ] @
Citajuci knjigu "Kako ne treba programirati na jeziku C++" naisao sam na zanimljiv primer koji sam odlucio da testiram (ako neko ima knjigu: Problem 82), pre svega zato sto sam u nekim ranijim primerima saznao neke nove stvari koje sam mislio da mogu da se uporebe za ovaj primer, za koji su oni dali neko drugo resenje. Dakle u pitanju je prosta klasa array. Evo mog programa, tj. modifikovana verzija njihovog mada nema mnogo razlike, sem sto sam ja stavio da konstruktor za kopiranje ne moze da se koristi i oni su koristili na jednom mestu memset, za sta se ispostavilo da ne moze da radi. Dakle, meni se ovaj program izrvsi normalno, ali na kraju ispise gomilu errora (slicno kao kada se za neki pointer 2 puta poziva delete, a new je pozvan 1). Problem je izgleda u f-ji store_it jer kada je ne pozivam pomenutih gresaka nema. To bi mi bilo logicno jedino ako bi se unutar f-je pozvao destruktor medjutim to se ne desava s obzirom da se f-ji prosledjuje referenca, a i njnim pozivanjem 2 puta program nastavi da radi. Zna li neko u cemu je problem? Program sam testirao samo na linuxu, tako da je moguce da na drugim platformama i sistemima program radi sobzirom da meni sve izgleda ok.

Code:

#include <stdio.h>

class var_array
{
    private:
        int *data;
        const int size;
        var_array(const var_array &other); //Konstruktor za kopiranje se ne moze koristiti
    public:
        var_array(const int _size):
            size(_size)
        {
            data = new int(size);
        }
        ~var_array()
        {
            delete []data;
        }

        int &operator[](const unsigned index)
        {
            return (data[index]);
        }
};

void store_it(var_array &test_array)
{
    test_array[1] = 1;
    test_array[3] = 3;
    printf("Odradio copy\n");
}

int main()
{
    var_array test_array(30);
    
    store_it(test_array);
    store_it(test_array);
    for (int i = 0; i < 30; ++i)
    {
        printf("%d\n",test_array[i]);
    }
    printf("gotovo\n");
    return 0;
}


[ X Files @ 26.07.2008. 12:07 ] @
Nisam gledao kod detaljno, ali proveri za pocetak ovaj deo koda:
data = new int(size);

Pretpostavljam da si hteo ovo:
data = new int[size];

[ StefanJer91 @ 26.07.2008. 12:14 ] @
Hah, 'ladno nisam primetio da je u tome je bio problem, hvala.