Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:4.11.2014 17:08
vector<MyClass> pool_;
size_t poolIndex_;
// ...
vector<MyClass*> stack;
stack.push_back(new (&pool_[poolIndex_++]) MyClass);

Zdar, s tímto jsem se myslím v C++ ještě nesetkal a netuším, co to dělá. Jde mi o to (&pool_[poolIn­dex_++]) mezi new a MyClass. Jakože vím co to dělá, ale nechápu, jak to může být mezi new a MyClass

Editováno 4.11.2014 17:09
Odpovědět
4.11.2014 17:08
Neaktivní uživatelský účet
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Lukáš Hruda:4.11.2014 17:20

Tomu se říká operátor new s umístěním (placement new). Vytvoří to objekt třídy na adrese kterou tomu operátoru předáš. Zde na adrese určené výrazem &pool_[poolIn­dex_++].

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
4.11.2014 17:20
Avatar
vitamin
Člen
Avatar
Odpovídá na Neaktivní uživatel
vitamin:4.11.2014 17:38

je to placement new, v c++ je viacej verzii operatora new, standartne new bez parametrov alokuje pamet a nasledne zavola konstruktor, new s parametrom void* (to je ten co si ty pouzil) nealokuje pamet, ale zavola konstruktor pre dany parameter. Existuje este napr operator new ktory prebera parameter std::nothrow, takyto operator nevyhodi vynimku pri alokacii...

Co sa tyka toho kodu co si sem dal, je tam vela moznych chyb, vola sa viacnasobne konstruktor, pouzit vector ako memory pool tiez nieje dobry napad lebo vector sa moze realokovat na ine miesto v pameti...

Editováno 4.11.2014 17:40
 
Nahoru Odpovědět
4.11.2014 17:38
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.