Existuje nejaké efektívnejšie riešenie než toto: ?
class Single {
public:
static Single *instance() {
return &inst;
}
private:
static Single inst;
Single(const Single&) {};
Single & operator=(const Single&) {};
~Single() {};
};
Single Single::inst;
Ako dobre dokáže gcc optimalizovať volanie typu Single::instance()->funkcia(); ? Vytvorí sa kód, ktorý kdesi uloží získaný pointer a následne sa skočí na miesto, na ktoré pointer ukazuje? Alebo vytvorí kód ktorý skočí rovno na tú funkciu, bez toho aby jej adresu zbytočne ukladal na stack?
Ale osobne nechapem pointu hladania optimalizacie pri volani instance, kedze dokopy cas spraveny pri tom by mal byt zanedbatelny voci inym veciam...
A navyse kombinovat dobre objektovo napisany kod a optimalizacie na drobnosti je totalne uchylne.
Bud chces citatelny kod a strpis drobne neefektivnosti alebo chces prudko efektivny kod a potom ho nepises objektovo.
Pre tých, čo mi chcú napísať niečo o čiste objektovo orientovanom programovaní, odkazujem, že to v žiadnom prípade na MCU nepatrí. Mne ide len o vytvorenie common rozhrania. Napr. objekt reprezentujúci I2C a UART budú mať sčasti rovnaký interface (napr. sendchar(), flushBuffer() ....). Btw. používam objekty aj bežným sposobom, ale to neznamená napr. že v nich nepoužijem inline asm. Čisté obj. programovanie na MCUs nepatrí a navyše C++ je schválne navrhnutý ako multiparadigm jazyk.