Srodne teme
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Placement new...

[es] :: C/C++ programiranje :: Placement new...

[ Pregleda: 1856 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.142.EUnet.yu.



+9 Profil

icon Placement new...15.12.2005. u 11:33 - pre 201 meseci
Code:

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{    
    char buf[8];
    int *x = new(&buf[0])int;
    int *y = new(&buf[0]+4)int;
    
    delete x;
    delete y;
}


Dakle, da li se problem pri brisanju x odnosno y promenljive javlja zato što bafer buf nije na heap-u? Jer ako bude, onda nema problema...
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.dyn.optonline.net.



+6 Profil

icon Re: Placement new...15.12.2005. u 13:05 - pre 201 meseci
Upravo tako. Placement new uopšte ne rezerviše memoriju, već samo konstruiše objekat u memoriji koju si mu ti naznačio. Tako da u tvom slučaju pokušavaš delete na memoriju sa steka. Da si buf kreirao na heapu, trebao bi ti samo jedan delete buf, a ne delete x i y
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.69.eunet.yu.



+9 Profil

icon Re: Placement new...15.12.2005. u 15:43 - pre 201 meseci
Jasno..Hvala.
A kada se sve obično koristi placement new?
Neko bi prvo rezervisao memoriju nekim baferom sigurnosti radi, a zatim postavio neki drugi objekat na to mesto. Međutim, postoji mogućnost da je nemoguće rezervisati ni memoriju za bafer. Zašto onda koristiti taj način, ako bi smo već mogli direktno da rezervišemo memoriju za dati objekat gde bi smo eventualno uhvatili izuzetak ako je tako nešto nemoguće učiniti u tom trenutku?
Fina stvar je što se objekti mogu poređati u određenom redosledu, tačno jedan za drugim kao kada bi se deklarisao niz istih objekata na steku npr. S tim što to može biti opasno, jer se nešto može u memoriji pregaziti na taj način...
Možeš li da navedeš neki primer gde je neki problem elegantno rešen sa placement new?
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1339
222.65.108.*

ICQ: 14293955
Sajt: https://github.com/milost..


+46 Profil

icon Re: Placement new...15.12.2005. u 16:03 - pre 201 meseci
Mozes da "menadzerises" memoriju time, i da smanjis fragmentaciju memorije.
Samo oprez, neki kompajleri (tacnije jedan koji sam video) su skloni da
setuju to parce memorije na nulu ukoliko je u pitanju kompajler-generisani default
konstruktor. To moze da ti stvori problem ukoliko si vec inicijalizovao parce memorije
i onda zelis da tu "smestis" objekat.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.dyn.optonline.net.



+6 Profil

icon Re: Placement new...15.12.2005. u 18:38 - pre 201 meseci
Druga interesantna primena placement operatora je kad imaš neki hardverski uređaj koji ima mapiranu memoriju na neki opseg i ti onda želiš da kreiraš objekte tačno na tom opsegu.

 
Odgovor na temu

[es] :: C/C++ programiranje :: Placement new...

[ Pregleda: 1856 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Srodne teme
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.