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

Placement new...

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

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Goran Arandjelovic
Beograd

Moderator
Član broj: 29116
Poruke: 368
*.142.EUnet.yu.

Sajt: www.cpplang.com


Profil

icon Placement new...15.12.2005. u 11:33

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...
15.12.2005. u 11:33 

Dragi Tata
Malo ispod Kanade

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



Profil

icon Re: Placement new...15.12.2005. u 13:05
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
15.12.2005. u 13:05 

Goran Arandjelovic
Beograd

Moderator
Član broj: 29116
Poruke: 368
*.69.eunet.yu.

Sajt: www.cpplang.com


Profil

icon Re: Placement new...15.12.2005. u 15:43
Laptopovi

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?
15.12.2005. u 15:43 

tosa
Virus Studios
Seoul, South Korea

Član broj: 1811
Poruke: 1310
222.65.108.*



Profil

icon Re: Placement new...15.12.2005. u 16:03
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.

Soylent green: over 6 billion served!
15.12.2005. u 16:03 

Dragi Tata
Malo ispod Kanade

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



Profil

icon Re: Placement new...15.12.2005. u 18:38
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.

15.12.2005. u 18:38 

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

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

Postavi temu Odgovori

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