оптимизация — C ++ оптимизатор удаления объекта с побочными эффектами

В настоящее время это не проблема, но я обеспокоен, переносится ли код или мы меняем компиляторы.

У меня есть код с блоком

{
MyClass myObj;
// copy some other variables but never touch myObj
.
.
} // expect destructor to be called on myObj

где myObj никогда не используется в коде блока, но конструктор имеет побочный эффект, и я полагаюсь на код деструктора MyClass, который будет выполнен при закрытии блока. Это работает, как и ожидалось, на моем текущем компиляторе arm с включенной оптимизацией.

Мой вопрос: есть ли что-то, что мне нужно сделать, например, объявить что-то изменчивое или задать какой-либо общий атрибут, чтобы оптимизатор не обнаруживал myObj как неиспользуемую переменную или что-то подобное.

Это не компилятор C ++ 11. Как я уже сказал, в настоящее время это не проблема, но я не хотел оставлять странную ошибку в будущем для кого-то другого.

3

Решение

Помимо явно определенных случаев, таких как RVO (оптимизация возвращаемого значения), Оптимизация не позволяет изменить наблюдаемое поведение программы. Оптимизация должна следовать так называемой правило «как будто».

3

Другие решения

Поскольку используемый вами компилятор даже незначительно совместим со стандартом (я смотрю на вас Turbo C ++). Это не проблема, потому что стандарт дает строгие гарантии о строительстве и разрушении. Эти гарантии являются основой RAII которая является основой стиля «Модерн» с ++.

2

По вопросам рекламы [email protected]