Zwykła zmienna czy alokacja pamieci

0

Cześć. W programie tworzę wektor struktur. Wektor nazywa się 'ksiazka' a nazwa typu struktury to 'osoba'.
W programie będę dodawał na koniec wektora kolejne struktury. I tutaj się zastanawiam czy do deklaracji tymczasowej struktury w funkcji ZwiekszIlosc() użyć zwykłej zmiennej strukturalnej czy zaalokować pamięć przez new a później ją zwolnić przez delete.
Czy jak wiele razy użyję tej funkcji z deklaracją zwykłej zmiennej to program utworzy jedną zmienną 'temp' czy wiele zmiennych 'temp'?
Które rozwiązanie jest lepsze?

struct osoba
{
    string a;
    string b;
    string c;
};

vector<osoba> ksiazka(ilosc);

void ZwiekszIlosc()
{
    if (ilosc < USHRT_MAX)
    {
        osoba temp;
        ksiazka.push_back(temp);
        ++ilosc;
    }
}
0

Zmienna temp przestaje istnieć wraz z wyjściem z funkcji.

0

Czyli nie ma sensu stosować alokacji?

0

Moim zdaniem obydwie metody będą równoważne, tyle, że przy dynamicznej alokacji musisz pamiętać o delete.

0

Z punktu widzenia nowych kompilatorów, lepiej byłoby tworzyć obiekt bez nazywania go, czyli tak:

ksiazka.push_back(osoba());

a jeśli przed dodaniem do wektora chcesz wypełnić stringi, to z odpowiednim konstruktorem

ksiazka.push_back(osoba("aa","be","ce"));

albo (nawet bez konstruktora)

ksiazka.push_back(osoba{"aa","be","ce"});

chociaż to ostatnie nie każdy kompilator ci przyjmie.

1

Zmienna temp przestaje istnieć wraz z wyjściem z funkcji.
No i co z tego???
Sam wektor jest obiektem globalnym. A w tej funkcji do wektora jest wstawiana jedynie kopia tego elementu ponieważ właśnie robi to operator przypisania wygenerowany przez domniemanie(kopiuje składnik po składniku). Zaś w metodzie push_back prawdopodobnie znajduje się jego użycie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1