Ограничить создание объектов класса в динамической памяти можно, сделав операторы new и delete приватными или защищенными.
Приватные операторы new и delete:
Это самый строгий способ. Только члены класса и дружественные функции (оператор new[] также нужно объявить приватным).
cpp
Защищенные операторы new и delete:
Позволяет создавать объекты в куче классам-наследникам, но запрещает делать это извне.
cpp
В обоих случаях пользователь сможет создавать объекты только на стеке или как члены других классов:
cpp