в C, например, нет деструкторов, поэтому стандартный паттерн работы с типами, которые нужно уничтожать специальным образом — сделать функцию, которая делает маллок + отдаёт PIMPL, и другую, которая выполняет кастомную логику уничтожения и делает free. Можно заметить, что это обязательно включает в себя аллокацию.