Вы можете создать его в стеке только в области, которая имеет доступ к деструктору. Поэтому вы можете сделать это в функции друга или статической функции-члене класса (или даже обычном члене класса).
Конец функции для локальной переменной отвечает за удаление, поэтому должен иметь возможность вызывать деструктор, хотя и неявно.
Вы можете создать его с новым из любого места, если у вас есть доступ к соответствующему конструктору.
Если вы используете его в смарт-указателе, вы должны убедиться, что он удален, имеет доступ. Это может отличаться для разных интеллектуальных указателей, а для некоторых вы можете предоставить собственный деструктор, который может быть статическим членом класса.