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

У меня довольно сложная задача (может быть, только для меня).

У меня есть несколько классов, которые наследуются от некоторого базового класса A. Все эти классы должны перегружать новые и удалять операторы. На данный момент я перегрузил new/delete в классе A, чтобы вернуть сообщение об ошибке, но я хочу иметь возможность распознавать эти случаи во время компиляции, а не во время выполнения, так как есть много наследуемых классов, и их очень сложно отследить. их.

Любые идеи, как я могу заставить те классы, которые наследуются от класса A, перегружать операторы new/delete? или любое другое решение?

Спасибо.


person user3445972    schedule 22.11.2015    source источник
comment
Как сделать их частными поможет мне? если кто-то не будет их реализовывать, то работать будет, я не прав? и я не уверен, что удалено, если вы имеете в виду = удалить, это функция С++ 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
Когда дочерний элемент не будет реализовывать новый, он не перейдет к обычному оператору нового и не будет выделять из кучи?   -  person user3445972    schedule 22.11.2015
comment
Это все еще неправильный вопрос. Подумайте о единой ответственности. Класс должен делать только одну вещь. Беспокойство о распределении - это вещь, и поэтому ваш класс не должен этого делать. У вас должно быть отдельное специальное средство, чтобы беспокоиться об ассигнованиях.   -  person Kerrek SB    schedule 22.11.2015
comment
Я не уверен, что следую. Реализация нового класса должна просто перегружать его и вызывать функцию распределения моего диспетчера памяти.   -  person user3445972    schedule 22.11.2015
comment
разве вы не можете просто использовать слово override, чтобы проверить, переопределяет оно или нет?   -  person hr0m    schedule 22.11.2015


Ответы (1)


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

person user3445972    schedule 22.11.2015