hilpers


  hilpers > comp.lang.* > comp.lang.c

 #1  
05.03.2010, 11:56
Seweryn Habdank-Wojewódzki
Hej,

Jaki jest czas zycia zmiennej statycznej w funkcji? Czy podestrukcji
jest ona odbudowywana?
Np.

Type& fun()
{
static Type t;
return t;
}

Obiekt "t" jest tworzony przy pierwszym wywolaniu funckji fun.
Jesli program przechodzi poza main() zmienna statyczna moze byc
zniszczona. Czy jesli jakis inny destruktor zawola taka funkcje
to czy ona zostanie odbudowana?

Wydaje mi sie, ze nie, ale nie moge znalezc na to paragrafu w
standardzie.

Ten kod to jakas pseudo implementacja singletona, ktorej nie
lubie :-).

Pozdrawiam,
 #2  
05.03.2010, 12:09
Michoo
Seweryn Habdank-Wojewódzki pisze:
> Hej,
>
> Jaki jest czas zycia zmiennej statycznej w funkcji? Czy podestrukcji
> jest ona odbudowywana?
> Np.
>
> Type& fun()
> {
> static Type t;
> return t;
> }
>
> Obiekt "t" jest tworzony przy pierwszym wywolaniu funckji fun.

Jest tworzony "przed pierwszym wywolaniem". Tzn standard ztcp nie daje
gwarancji, ze to bedzie przy 1 wywolaniu a nie np. przy starcie.

> Jesli program przechodzi poza main() zmienna statyczna moze byc
> zniszczona. Czy jesli jakis inny destruktor zawola taka funkcje
> to czy ona zostanie odbudowana?

Nie. Po zniszczeniu obiektu odwolanie do niego to ub. Alexandrescu mial
w którejs z ksiazek opisanego "fenixa" który odradzal sie po zniszczeniu
dzieki placement new. Ale ztcw to tez bylo cos w stylu "dziala na
wszystkich znanych implementacjach, ale jest to ub".
>
> Wydaje mi sie, ze nie, ale nie moge znalezc na to paragrafu w
> standardzie.
>
> Ten kod to jakas pseudo implementacja singletona, ktorej nie
> lubie :-).

Moze wlasnie inspirowana pomyslem pana A.
 #3  
05.03.2010, 12:11
Seweryn Habdank-Wojewódzki
Witam,

> Nie. Po zniszczeniu obiektu odwołanie do niego to ub. Alexandrescu miał
> w którejś z książek opisanego "fenixa" który odradzał się po zniszczeniu
> dzięki placement new. Ale ztcw to też było coś w stylu "działa na
> wszystkich znanych implementacjach, ale jest to ub".


Super. Wlasnie tego argumentu mi brakowalo - zaraz do code review
chlapne odwolanie do Aleksandrescu i mam klopot z glowy :-).

Pozdrawiam,
 #4  
05.03.2010, 13:40
Mariusz Marszałkowski
On 5 Mar, 13:56, Seweryn Habdank-Wojewódzki <habd> wrote:
> Hej,
>
> Jaki jest czas zycia zmiennej statycznej w funkcji? Czy podestrukcji
> jest ona odbudowywana?
> Np.
>
> Type& fun()
> {
> static Type t;
> return t;
>
> }
>
> Obiekt "t"  jest tworzony przy pierwszym wywolaniu funckji fun.
> Jesli program przechodzi poza main() zmienna statyczna moze byc
> zniszczona. Czy jesli jakis inny destruktor zawola taka funkcje
> to czy ona zostanie odbudowana?


Czy to naprawde jest wazne? Po prostu trzeba napisc tak program, aby
byl niezalezny od kolejnosci wywolania konstruktorow i destruktorow
wszystkich statycznych obiektow.

Pozdrawiam
 #5  
05.03.2010, 22:28
Bronek Kozicki
On 05/03/2010 12:56, Seweryn Habdank-Wojewódzki wrote:
> Jesli program przechodzi poza main() zmienna statyczna moze byc
> zniszczona. Czy jesli jakis inny destruktor zawola taka funkcje
> to czy ona zostanie odbudowana?
>
> Wydaje mi sie, ze nie, ale nie moge znalezc na to paragrafu w
> standardzie.
>
> Ten kod to jakas pseudo implementacja singletona, ktorej nie
> lubie :-).


zastosuj Schwarz Counter


B.
Podobne wątki
Pytanie odnośnie zmiennej statycznej

Witam Znalazłem program, gdzie jest dana klasa (w osobnym pliku): public class plik2 { //operacje } W drugim pliku jest następująca systuacja:

Odwolac sie do zmiennej globalnej z klasy statycznej

Mam klase(wywolywane sa metody na zecz klassy nie obiektu) i w jednej z jej funkcji proboje odwolac sie do pewnego globalne obiektu i wywolac jego funkcje wiec...

Dlaczego nie ma w Locale zmiennej statycznej dla języka polskiego ?

Ja uzyskuję język polski poprzez metodę getDefault(). No ale jakbym pracował np. na maszynie gdzie ustawiony jest jako domyślny inny język, to jak sobie ustawić na polski ?...

dostęp do zmiennej statycznej - w czym jest problem/

wszystko dotyczy wykorzystania widget'ów SWT są dwie klasy Okno i Polaczenie. w klasie Okno zadeklarowałem globalny statyczny obiekt TableItem wiersz (wiersz tablicy do...


Czasy w strefie GMT. Teraz jest 23:17. | Privacy Policy