Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Když diskuse,
tak s Lopuchem

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub C, C++ [ŽP: neomezená] (kategorie Programování) moderuje Šéf Lopuchu.
Archiv

Články

Jak bezpečně ukončit vlákno z DllMain
FastAllocPool - urychlení častých alokací a dealokací
Akce a zpráva jako objekt
Tuply v C++
Efektivní alokátor malých objektů a tady druhý a třetí díl
Šablony: Být vládce kvalifikátorů
Vracíme z funkce objekty
Základy komunikace mezi procesy (ve Windows)
Multiple Interface a Instance Factory
Multithreading v C++ (ve Win32)
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: prolydd
[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
huh huh 4.6.2010 20:12  823
Tak jistě, v tom je ta záludnost, jinak by stačilo cin >> v[0];
bredy 4.6.2010 20:03  822
No vzhledem k tomu, že neznám STL z paměti, tak tohle nevím. Napadlo mne použití cin >> *v.begin(), ale problémem je pro mě nejprve vyrobit ten první prvek ve vektoru v, protože v.begin() jinak ukazuje na end()
huh huh 4.6.2010 19:03  821
Pokud chcete hádanky, dám vám taky jednu. Mějme
using namespace std;
vector<int> v;
Načtěte číslo z cin do v jediném příkazu (neobsahujícím operátor čárka ☺), bez použití pojmenované proměnné. Předpokládejte, že čtení se vždy podaří (tj. program se nemusí chovat korektně, pokud ne). Můžete použít cokoli (třídu, funkci, makro ...) z libovolného standardního (ISO C++ 98) hlavičkového souboru.
bredy 1.6.2010 12:54  820
Chtěl jsem si založit blog na Rootu, s tím, že tam budu posílat své články o C++. Root ma ale blogy momentálně zablokované (jejich zakládání), takže smůla. Prvním článkem měl být článek o seznam typu. Tak zatím zůstává na mém blogu

Seznamy typů a jejich použití
bredy 31.5.2010 13:00  819
Och, opravuju chybu "vysí" na "visí"
davpe Davpe 31.5.2010 12:59  818
hmm, ja tipoval ze WCKB znamena "Wo co kurva běží?" Ale určitě to sem dávej.
bredy 31.5.2010 12:49  817
Pokud bude zájem a budou se podobné úlohy objevovat na WCKB u nás v Seznamu, mohu to sem postovat. (WCKB = WC Knowledge Base, čili úryvky objevující se na toaletach). Druhým WCKB je spíš apel na programátory ve znění

I ty můžeš používat const


(vysí to na velké toaletě hned vedle podobného zvolání ohledně splachování a štětky).

Další WCKB bude zřejmě koncem června
bredy 31.5.2010 12:45  816
huhPřesně tak. A to tento příklad neřeší výjimku v destruktoru, předpokládá se, že nevznikne.
huh huh 31.5.2010 12:41  815
Bredy [812]: Jen si tak tipnu bez nahlížení do chytrých knih :-)
když selže
druhy(new Druhy_t())
(tj. vyhodí výjimku - buď new nebo něco v konstruktoru Druhy_t), tak vznikne memory leak, protože prvni už je alokována.
bredy 31.5.2010 09:43  814
StinnyNení to úplně přesně ono. V zásadě se stačí držet toho co tam je. Dejme tomu, že kopírovací konstruktory a operátory se buď neřeší, nebo se řeší jejich zakázáním, ... asi by stálo za to tam uvést, ale tam problém nevězí.
stinny 31.5.2010 09:13  813
BredyO dvojitou dealokaci pri copy constructoru nebo operatoru =
bredy 31.5.2010 07:51  812
WCKB ze Seznamu
class OCoSiKoleduju_t {
public:
    OCoSiKoleduju_t()
        : prvni(new Prvni_t()),
          druhy(new Druhy_t())
    {}

    ~OCoSiKoleduju_t() {
        delete druhy;
        delete prvni;
    }

private:
    Prvni_t *prvni;
    Druhy_t *druhy;
};


Ví někdo řešení?
sekory Sekory The journey of thousand miles - starts with a single step. 8.3.2010 15:00  811
C++ za 21 dní :-)
bredy 1.3.2010 19:45  810
DavpeNikoliv. Alokátor je objekt, který se jednoduše stará o alokace. Jeho využití je zejména u kontejnerů, kterým lze ovlivnit způsob, jak se budou alokovat prvky, nebo interní struktury kontejneru. Příklad: std::allocator

Já mám ve své knihovně dvoustupňové allokátory. První stupeň je StdAlloc, který je továrnou pro tzv. StdAllocBlock. Tenhle objekt obsahuje ukazatel na alokovaný prostor a jeho velikost. Tenhle blok lze předat třeba do AutoArray (něco jako vector) a v něm pak ten objekt alokuje. Tenhle druhý stupeň alokátoru se umí i relokovat a má tu vlastnost, že sám v destruktoru volá delete.

Mezi dalšími alokátory mám třeba StaticAlloc<n> který dělá podobnou věc jako StdAlloc, akorát alokuje vždy statické pole dané velikosti (n). Když to vrazíš do AutoArray, tak uděláš to, co s vektorem nikdy. Kontejner bude ve svým těle obsahovat rezervovaný prostor pro n prvků, ale dál se bude chovat jako rozšiřovatelné pole (až do velikosti n). Odpadne tak jedno zbytečný new a delete.

Ale abych to shrnul. Alokatorem obecně nazýváme objekt, který má na starost přidělování a uvolňování paměti. Poskytujeme ho kontejnerům, nebo dalším objektům, které něco musí alokovat. V šablonách je pak výhodou to, že můžeme kontejneru podstrčit alokátor, který třeba nealokuje paměť fyzicky, ale alokace nějakým způsobem emuluje. Nebo alokuje ve speciální haldě, třeba ve sdílené paměti.
davpe Davpe 1.3.2010 16:27  809
Bredy: alokátory? to je něco jako garbage collector?

[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt