Кажется, я пойду против течения (поэтому я ожидаю снижения голосов, но, пожалуйста, оставьте комментарий, чтобы указать причину).
Я не вижу причин запрещать выделение кучи, в основном потому, что мне не нравится повторять потенциальное использование созданных мной классов.
Как правило, я стараюсь как можно меньше ограничивать использование моих классов. Это означает как можно меньше предположений. Ничто так не сводит с ума, как неспособность делать то, что вы хотите, просто потому, что это было запрещено ... по неизвестным или просто неправильным причинам (обозначая суеверные / ошибочные убеждения автора библиотеки).
Кроме того, прагматизм учит, что на самом деле невозможно предотвратить что-либо в C ++. Например, некоторые люди говорили об охране -> что, если я хотел бы создать суперкласс (который удобно добавляет логирование)? Тогда я бы поставил охранный класс в качестве атрибута, и даже если его (исходный класс) оператор new
является закрытым, мой суперкласс может быть создан в куче, если он каким-либо образом не копирует механизм.
Так что, что касается меня, дело не в том, почему или как. Я просто не играю со схемами выделения памяти в библиотечном коде, пользователь может использовать то, что ему удобнее.