Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Std::vector wskaźników. Trzeba usuwać wszystkie elementy za pomocą delete?

Ostatnio zmodyfikowano 2015-08-23 19:59
Autor Wiadomość
nano-stalker
Temat założony przez niniejszego użytkownika
Std::vector wskaźników. Trzeba usuwać wszystkie elementy za pomocą delete?
» 2015-08-22 23:27:35
Witam. Tak jak w temacie. Jeśli mamy taką oto tablicę wskaźników:
std::vector < std::string *> tablica
 to trzeba dla każdego jej elementu wywoływać operator
delete
, żeby nie spowodować wycieków pamięci? Z góry dziękuję za odpowiedzi.
P-136753
notabigthreat
» 2015-08-22 23:29:34
Tak.
Nie baw się lepiej we wskaźniki, tylko użyj std::unique_ptr<std::string> z <memory>.
BTW Po co chcesz wskaźniki? Nie wystarczy wektor obiektów?
P-136755
nano-stalker
Temat założony przez niniejszego użytkownika
» 2015-08-22 23:36:43
Czyli mój zapis powinien wyglądać tak? Dzięki za pomoc.
std::vector < unique_ptr < std::string >>
Nie, ponieważ chcę żeby to było na oryginalnych obiektach (nie string'ach a własnych klasach) a & nie chciało ze mną współpracować, lub coś robiłem źle, a pozatym nie chcę kopii ;)
P-136757
notabigthreat
» 2015-08-22 23:38:37
Na pewno nie:
std::vector < std::string >
 ?
P-136758
pekfos
» 2015-08-22 23:42:58
Nie, ponieważ chcę żeby to było na oryginalnych obiektach
Co? Podaj konkretny kod, bo być może nie możesz używać tu delete.
P-136760
notabigthreat
» 2015-08-22 23:50:18
a pozatym nie chcę kopii ;)
vector<std::string>::push_back nie tworzy kopii.
P-136761
nano-stalker
Temat założony przez niniejszego użytkownika
» 2015-08-22 23:58:50
C/C++
class Logger
{
    std::vector < Log *> log; // ten vector o którym mowa
   
    void dodajLog( Log * newLog ) { log.push_back( newLog ); } // dodaje nowy log do vectora
   
};


void main()
{
   
    Log jakis_log; // tworze obiekt Log'a
    jakis_log.adres( "C:/tu.log" ); // i na przyklad ustawiam adres...
   
    Logger logger; // tworze obiekt Loggera
    logger.dodajLog( & jakis_log ); // dodaje wskaznik do tego log'a do vectora
   
    // i pozniej chce cos zmienic w obiekcie jakis_log... np.
    jakis_log.adres( "C:/inne_miejsce.log" );
   
};

W zasadzie, to chodzi mi, że gdy wywołam destruktor Loggera to powstaną wycieki pamięci. Czyli najlepiej użyć std::unique_ptr? Wybaczcie za błędy i nieścisłości ale zmęczony jestem. Vector nie tworzy kopii... a tego nie wiedziałem.
P-136763
notabigthreat
» 2015-08-23 00:01:11
Pokazałbyś klasę Log?
P-136764
« 1 » 2
  Strona 1 z 2 Następna strona