CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - C++ STL map ale bez sortowania

C++ STL map ale bez sortowania

dział ogólny

Re: C++ STL map ale bez sortowania

Nowy postprzez Cyfrowy Baron » wtorek, 24 lipca 2012, 13:21

Dokładnie i o to chodzi. Kontrolę przejmuje inny obiekt. Ważne, że w funkcji nie ma wycieku, skoro przekazanie następuje np. do Memo1. Z tego co się orientuję, to auto_ptr samo po sobie sprząta.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: C++ STL map ale bez sortowania

Nowy postprzez polymorphism » wtorek, 24 lipca 2012, 13:28

Ale to:
KOD cpp:     UKRYJ  
Memo1->Lines->AddStrings( DoTest() );

nie przejmuje na własność obiektu! Jedynie kopiuje zawartość jednej listy (z DoTest) do drugiej (Memo1). Wyciek pozostaje.

Z tego co się orientuję, to auto_ptr samo po sobie sprząta.

Owszem, ale Ty funkcją release uwolniłeś wskaźnik na obiekt klasy TStringList, zatem auto_ptr niczego nie posprząta.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: C++ STL map ale bez sortowania

Nowy postprzez Cyfrowy Baron » wtorek, 24 lipca 2012, 23:43

Dobrze, więc jak ty byś to zrobił?! Kiedy auto_ptr sprząta po sobie?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: C++ STL map ale bez sortowania

Nowy postprzez polymorphism » środa, 25 lipca 2012, 09:24

Przecież tutaj pokazałem, zresztą na Twoją prośbę.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: C++ STL map ale bez sortowania

Nowy postprzez Cyfrowy Baron » środa, 25 lipca 2012, 09:43

Umknęło mi to. Różnie kombinowałem, ale o tym nie pomyślałem.
To trochę zmienia. Bibliotekę memory należy włączyć w pliku nagłówkowym jeżeli funkcja DoTest ma być częścią klasy formularza. Do pobrania zwróconej przez funkcję zawartości, trzeba posłużyć się funkcją get.

Czyli sama konstrukcja funkcji:

KOD cpp:     UKRYJ  
std::auto_ptr<TStringList> __fastcall TForm1::DoTest(void)
{
 std::auto_ptr<TStringList> myMap(new TStringList);

 myMap->Add("klucz=costam");
 myMap->Add("ble=costam2");
 myMap->Add("ble=costam2");
 myMap->Add("ble=costam2");
 myMap->Add("aassble=costam2");
 myMap->Add("jakaś kategoria testowa=costam2");

 return  myMap;
}


Tam gdzie jest pobierany cały obiekt trzeba użyć get:

KOD cpp:     UKRYJ  
 Memo1->Lines->AddStrings( DoTest().get() ); /* zwracam uwagę na get */
 Memo1->Text = StringReplace(Memo1->Text, "=", ":", TReplaceFlags() << rfReplaceAll);



A tutaj już nie:

KOD cpp:     UKRYJ  
 int y = DoTest()->Count;
 for( int x = 0; x < y; x++ )
 {
   String key = DoTest()->Names[x];
   String value = DoTest()->Values[key];
   Memo1->Lines->Add( key  + " : " + value );
 }
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości