Pokud umožňujete kopírovat sdílením, tedy že máte konstruktor který přijímá const referenci a provede sdílení, pak vám const nepomůže, protože ho tímto způsobem obejdete
Pseudo příklad
const Value cv = {10,20,30}
Value v (cv);
v.push_back(40); // < změní se i cv!!;
Musel byste se vzdát jiných věcí. Tak například kopírování sdílením... tedy vytvářet plnohodnotné kopie. Kopírovací konstruktor by při přijmu const hodnoty prostě nemohl sdílet, musel by kopírovat. Přitom pokud kopírujete do objektu o kterém víte, že taky bude pouze const, pak je vytváření hluboké kopie zbytečné. Kopírovací konstruktor však tuhle informaci nemá
Value x(y); // potřebuju kopii
const Value x(y); // mohu sdílet.
Já to ze začátku řešil tak, že jsem měl dvě třídy. Value a ConstValue. Objekty Value by obsahovaly měnitelné kontejnery, objekty ConstValue by se měnit nedaly. No jenže co když chcete mít měnitelný kontejner konstantních kontejneru? Kterou třídu na to použijete? Já zavedl třetí....
No výsledek nebyl vůbec přehledný. Navíc jsem časem zjistil, že používám v zásadě jen ConstValue a objekty, kterým jsem říkal buildery, tedy něco, co mi pomáhá vytvořit kontejner (objekt , pole) než z něho udělám ConstValue. A tak jsem to celé přepsal do současné podoby.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 50 707×
Přečteno 23 722×
Přečteno 22 760×
Přečteno 20 746×
Přečteno 17 645×