Ahoj,
budu mit třídu exportovanou dynamickou knihovnou, např. class TridaZKnihovny.
Pokud v programu který tuto knihovnu používá vytvořím proměnnou
TridaZKnihovny* instance = new TridaZKnihovny();
tak mi kompilátor vygeneruje kód závislý na velikosti, kterou odvodí třeba z hlavičkového souboru.
Takže když bych updatoval tu dyn. knihovnu, tak mi to může rozbít ten program, protože se velikost toho
typu může změnit.
Teď ta otázka: Potřeboval bych teda zaručit, že new alokouje správnou velikost. V C++ můžete přetížit operátor new.
Nějak takhle:
class TridaZKnihovny {
void* opeator new(size_t size) { return malloc(sizeof(TridaZKnihovny)); } // ignoruju size
}
Všude jsem našel různý příklady jak někdo přetěžuje ten operátor aby pak alokoval paměť z nějaké předalkovoané oblasti, takže rychlejší alokace, ale nikde jsme neviděl, že by někdo ignoroval ten parametr size a sám si tu velikost určil.
Nemůžu nikde najít, jestli je zaručené, že ten argument size není nějak rozšířen o místo, co potřebuje třeba standardní knihovna pro správu paměti nebo tak něco. Jako kdyby to bylo tak, že size = sizeof(TridaZKnihovny) + dodatecna_pamet, tak to nebude fungovat, protože já pak alokouju jen sizeof(TridaZKnihovny).
Snad mi rozumíte, o co mi jde.