Ĺadny brzuch
Witam, mój temat dotyczy kontenera vector ze Standardowej Biblioteki Typów(STL).
1. Mam wskaźnik do wektora znaków
#include <vector> using namespace std ... vector<char> * ptr = new vector<char>; ... ptr->push_back('a');
Jak widać, elementy do wektora dodaję za pomocą metody push_back(). Chodzi mi o banalną rzecz - odwołanie do poszczególnych elementów wektora. Działa:
ptr->operator[](i)ale chodzi mi o coś prostszego, jak:
*(ptr[i]) // nie działa No właśnie, gdzie tu błąd?
2. Jeśli zaalokowałem na stercie zwykłą tablicę
char * ptr = new char[100] i chcę ją usunąć, to nie napiszę
delete ptr bo to spowoduje wyciek pamięci. Trzeba napisać
delete[] ptr. Ale jak to jest z wektorami?
#include <vector> using namespace std; ... vector<char> * ptr = new vector<char> ... delete ptr;Czy tu nie ma wycieku?
bo zapamiętaj, że vector nie był projektowany jako obiekt dostępny przez wskaźnik, ( tak jak to bywa z obiektami z BCB ). By się odwołać do operatora [] niejawnie musisz dotrzeć do samego obiektu:
(*ptr)[index];
By zwolnić pamięć z vector'a należy wywołać metode clear() lub dla pojedyńczego obiektu erase() ( no chyba, że za tablice mamy wskaźniki do obiektów -> wtedy nastąpi wymazanie wskaźnika, a nie obiektu, czyli trzeba obiekt skasować ręcznie ).
I nie -> nie ma wycieku, bo vector w destruktorze ma wywołanie metody clear();
Witam, mój temat dotyczy kontenera vector ze Standardowej Biblioteki Typów(STL).
Gwoli ścisłości: STL- Standard Template Library - Standardowa biblioteka szablonów.
eh ale obciach :rolleyes:
Gwoli ścisłości: STL- Standard Template Library - Standardowa biblioteka szablonów.
eh ale obciach :rolleyes:
Rzeczywiście, ale głomb zemnie :)
Gwoli ścislości: klasa vector (...)
Gwoli scislosci... ale wy jesteście drobiazgowi.
Gwoli ścisłości nie ma nic złego w powiedzeniu kontenera z biblioteki standardowej STl ponieważ do niej właśnie należy...A topik-CLOSE
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
1. Mam wskaźnik do wektora znaków
#include <vector> using namespace std ... vector<char> * ptr = new vector<char>; ... ptr->push_back('a');
Jak widać, elementy do wektora dodaję za pomocą metody push_back(). Chodzi mi o banalną rzecz - odwołanie do poszczególnych elementów wektora. Działa:
ptr->operator[](i)ale chodzi mi o coś prostszego, jak:
*(ptr[i]) // nie działa No właśnie, gdzie tu błąd?
2. Jeśli zaalokowałem na stercie zwykłą tablicę
char * ptr = new char[100] i chcę ją usunąć, to nie napiszę
delete ptr bo to spowoduje wyciek pamięci. Trzeba napisać
delete[] ptr. Ale jak to jest z wektorami?
#include <vector> using namespace std; ... vector<char> * ptr = new vector<char> ... delete ptr;Czy tu nie ma wycieku?
bo zapamiętaj, że vector nie był projektowany jako obiekt dostępny przez wskaźnik, ( tak jak to bywa z obiektami z BCB ). By się odwołać do operatora [] niejawnie musisz dotrzeć do samego obiektu:
(*ptr)[index];
By zwolnić pamięć z vector'a należy wywołać metode clear() lub dla pojedyńczego obiektu erase() ( no chyba, że za tablice mamy wskaźniki do obiektów -> wtedy nastąpi wymazanie wskaźnika, a nie obiektu, czyli trzeba obiekt skasować ręcznie ).
I nie -> nie ma wycieku, bo vector w destruktorze ma wywołanie metody clear();
Witam, mój temat dotyczy kontenera vector ze Standardowej Biblioteki Typów(STL).
Gwoli ścisłości: STL- Standard Template Library - Standardowa biblioteka szablonów.
eh ale obciach :rolleyes:
Gwoli ścisłości: STL- Standard Template Library - Standardowa biblioteka szablonów.
eh ale obciach :rolleyes:

Rzeczywiście, ale głomb zemnie :)
Gwoli ścislości: klasa vector (...)

Gwoli scislosci... ale wy jesteście drobiazgowi.
Gwoli ścisłości nie ma nic złego w powiedzeniu kontenera z biblioteki standardowej STl ponieważ do niej właśnie należy...A topik-CLOSE