как ограничить объем перегруженного оператора new / delete только единицей перевода (когда их нельзя сделать stati c) - PullRequest
1 голос
/ 06 мая 2020

При переносе проекта из Visual Studio 2010 в 2017 я столкнулся с проблемой. Один из проектов имеет глобальные stati c перегруженные операторы new / delete, при компиляции с VS2017 выдает ошибку, что операторы new / delete не могут быть объявлены stati c (использовались для компиляции на VS2010). Но stati c обеспечивает область действия этих перегруженных спецификаций new / delete c для единицы перевода. Как это может быть достигнуто, когда больше не разрешены stati c new / delete. Пожалуйста, помогите мне с предложениями.

Ответы [ 2 ]

0 голосов
/ 15 мая 2020

Когда вы перегружаете оператор new / delete, они неявно являются c и не требуют разрешения области видимости для создания объекта. Вы можете посетить веб-страницу , , чтобы узнать почему.

Операторы new и delete также могут быть перегружены, как и другие операторы в C ++. Операторы new и delete могут быть перегружены глобально или они могут быть перегружены для определенных классов c. Если эти операторы перегружены с использованием функции-члена для класса, это означает, что эти операторы перегружены только для указанного c класса. Если перегрузка выполняется вне класса (т. Е. Это не функция-член класса), перегруженные new и delete будут вызываться каждый раз, когда вы используете эти операторы (внутри классов или вне классов). Это глобальная перегрузка.

Итак, вам не нужно объявлять и определять эти новые / удаляемые функции во всех CPP файлах, в которые был включен предыдущий заголовок.

0 голосов
/ 06 мая 2020

обеспечивает как объявление, так и определение внутри файла CPP. Это ограничит видимость указанием c единицы компиляции

...