Принудително претоварване на new/delete за наследяващи класове

Имам доста предизвикателство (може би само за мен).

Имам няколко класа, които наследяват от някакъв базов клас A. Всички тези класове трябва да претоварват операторите new и delete. Засега претоварих new/delete в клас A, за да върна съобщение за грешка, но искам да мога да разпознавам тези случаи по време на компилация, а не по време на изпълнение, тъй като има много наследяващи класове и е много трудно да се проследи тях.

Някакви идеи как мога да принудя тези класове, които наследяват от клас A, да претоварват операторите за нови/изтриване? или някакво друго решение?

Благодаря.


person user3445972    schedule 22.11.2015    source източник
comment
Как ще ми помогне да ги направя частни? ако някой не ги прилага, ще работи, греша ли? и не съм сигурен какво е изтрито, ако имате предвид = изтриване, това е функция на C++11 и не мога да я използвам, дори ако може да е решение   -  person user3445972    schedule 22.11.2015
comment
Имайте предвид, че подправянето на функциите за разпределение обикновено е грешен подход. Това няма да попречи на никого да направи, да речем, std::vector<Foo>.   -  person Kerrek SB    schedule 22.11.2015
comment
А, няма значение. Разбрах погрешно. (И отговорът е, че не можете.)   -  person Kerrek SB    schedule 22.11.2015
comment
В нашия случай искаме да постигнем по-добра производителност на разпределение и освобождаване, така че е необходимо.   -  person user3445972    schedule 22.11.2015
comment
Това е срамота! Благодаря   -  person user3445972    schedule 22.11.2015
comment
XY проблем? Защо трябва да претоварват new и delete? Както и да е, можете да направите operator new в родителския клас частен.   -  person n. 1.8e9-where's-my-share m.    schedule 22.11.2015
comment
Когато едно дете няма да внедри new, няма ли да отиде до обичайния new оператор и да разпредели от купчината?   -  person user3445972    schedule 22.11.2015
comment
Това все още е грешен въпрос. Мислете за една отговорност. Един клас трябва да прави само едно нещо. Притеснението за разпределението е нещо, така че вашият клас също не трябва да прави това. Трябва да имате отделно, специално съоръжение, за да се грижите за разпределенията.   -  person Kerrek SB    schedule 22.11.2015
comment
Не съм сигурен, че следвам. Реализацията на класа на new трябва просто да го претоварва и да извиква функцията за разпределение на моя мениджър на паметта.   -  person user3445972    schedule 22.11.2015
comment
не можете ли просто да използвате думата override, за да проверите дали се override или не?   -  person hr0m    schedule 22.11.2015


Отговори (1)


Решението беше да внедря новия оператор private в базовия клас и сега получавам грешка в съответствието за всеки клас, който наследява от A и не прилага оператор new/delete.

person user3445972    schedule 22.11.2015