Trebuie utilizată numai prima metodă. A doua metodă este o abordare extrem de murdară. Crimă. Fotografia.
În ceea ce privește problema efectului valorii cElementelor în momentul eliberării memoriei, aceasta este o întrebare interesantă. Însuși procesul de distrugere a unei matrice trebuie împărțit în două faze.
Prima fază este maturarea conținutului matricei. Dacă aceasta este o serie de obiecte, legăturile vor fi anulate, IUnknown :: Release va fi apelată. Dacă acesta este un șir, SysFreeString va fi apelat pentru fiecare element. VariantClear pentru opțiuni. Și așa. În această fază, desigur, valoarea cElementelor este afectată.
Un alt lucru este faptul că SaMap și funcția SaUnmap (și anume, așa că am sunat funcția în cărămizi lor. Responsabil pentru proiectarea SAFEARRAY-matrice la o regiune de memorie arbitrară), de obicei, să ia o trimitere la o serie de ByRef. În același timp, ei nu știu cine este proprietarul de matrice (proprietarul este responsabil pentru crearea și distrugerea). Ei nu știu ce a folosit proprietarul pentru a crea și a aloca. Prin urmare, ei nu se pot baza în mod fiabil pe metoda IMalloc :: Free pentru a elibera memoria.
Pe de altă parte, se poate imagina o serie de opțiuni de furcă dacă SaMap are o matrice ByRef, aceasta înseamnă că există VB-shnaya variabilă matrice. Deci, fie matrice a fost alocată de către VB, sau rămâne o opțiune care a proiectat o serie de terțe părți (eventual folosind o metodă non-standard de management al memoriei) și a înregistrat un pointer la SA-descriptori din variabila VB-shnuju. Dar merită să ne amintim că, în al doilea caz, eliminarea automată a VB merge Forces matrice scenariu oleaut32.dll, care este, memoria va fi eliberat cu IMalloc: gratuit indiferent de modul în care a fost filate. Deci, dacă variabila VB-shnuju matrice stabilește o terță parte, atunci matura ar trebui să facă. Și cu astfel de matrice nu trebuie să utilizați cascadorii cu cElementele de substituție.
- Îi separăm fețele zâmbitoare de restul corpului lor, căpitane.
- Așa este! Le decapităm.