Std::vector wskaźników. Trzeba usuwać wszystkie elementy za pomocą delete?
Ostatnio zmodyfikowano 2015-08-23 19:59
nano-stalker Temat założony przez niniejszego użytkownika |
» 2015-08-23 00:05:43 To chyba mało ważne ale: class Log { fstream file; void adres( string nowyAdres ) { file.open( nowyAdres ); }; void dodajWpis( string wpis ) { file << wpis }; };
Taka mała i króciutka wersja ale w pełni pokazuje co chcę uzyskać :) Biorąc po uwagę wcześniejszy wpis. To znaczy, że mam jednak użyć unique_prt w vector'rze tak? :) dzięki. |
|
pekfos |
» 2015-08-23 12:47:21 To znaczy, że mam jednak użyć unique_prt w vector'rze tak? :) |
To znaczy, że nie wolno ci użyć unique_ptr<>, ani delete. Log jakis_log;
logger.dodajLog( & jakis_log );
|
Nie ma wycieku pamięci, jakis_log jest niszczony automatycznie po wyjściu ze swojego zakresu. Nie możesz tego ręcznie usuwać. vector<std::string>::push_back nie tworzy kopii. |
A co tworzy? |
|
notabigthreat |
» 2015-08-23 17:16:21 @UP: cout << is_nothrow_constructible < string, string &&>::value;
Jeśli masz wiadro pełne wody i przelewasz zawartość do innego - kopiujesz? |
|
pekfos |
» 2015-08-23 17:23:06 Jeśli masz wiadro pełne wody i przelewasz zawartość do innego - kopiujesz? |
Kopiuję, bo mam w efekcie 2 wiadra wody. push_back wcale nie musi przenosić, to zależy od rodzaju przekazanej wartości. Ogólne stwierdzenie, że push_back nie tworzy kopii, to wprowadzanie w błąd. |
|
notabigthreat |
» 2015-08-23 18:10:14 Zgadzam się, że jedna kopia wykonuje się, jeśli jej potrzebujemy. Myślałem (źle?) o tych elementach, które już się znajdują w kontenerze. |
|
nano-stalker Temat założony przez niniejszego użytkownika |
» 2015-08-23 19:59:02 Dobrze. Dzięki za pomoc, będę musiał to jeszcze przemyśleć. Za każdym razem zdaję sobie sprawę jak niewiele umiem, oraz na jak wiele istotnych rzeczy nie zwracam uwagi... Dzięki jeszcze raz. |
|
1 « 2 » |