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