2016-01-21 1 views
-1

Я использую Visual C++ 2013.C++ 11 Переназначение удалить, не затрагивая = удалить

мне нужно пересмотреть мое удаление ключевого слова (еще один инструмент управления памятью)

#define delete foo(SOME,PARA,METERS), delete 

Цель состоит в том, чтобы перенаправить удалите переопределенную версию моей, но у меня есть проблема при использовании ключевого слова «= delete» или с использованием внешнего кода.

Class Something { 
public: 
    Something() {} 
    Something(const Something &) = delete; 
} 

Примечание: VC13 дает следующие ошибки:

error C2061: syntax error : identifier 'instance' 
error C2238: unexpected token(s) preceding ';' 

Вопрос

Есть ли способ, чтобы переопределить удалить, не затрагивая = удалить?

Notes (издание)

Переопределение ключевого слова действительно что-то, чтобы обращаться с осторожностью и, вероятно, можно избежать еще одной конструкции практически в любом случае. Я уже в полной мере осознает, что и я не прошу обходной. Смотрите этот вопрос скорее как исследование, чем фактическое развитие производства.

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

Таким образом, вопрос просто об определении удаления при использовании в качестве операции освобождения, а не в качестве знака «нет реализации».

+7

'#define удалить ...' звучит как плохая идея. – erip

+4

Внедрите 'operator delete' вместо использования MACRO. – Jarod42

+0

Почему вы не хотите использовать 'operator delete()' вместо этого. Это кажется более ожидаемым ... –

ответ

3

См. cppreference для сменные функции освобождения. Вы можете переопределить глобальные операторы удаления.

7

мне нужно пересмотреть мое удаление ключевого слова

Нет, вы не знаете.

Цель состоит в том, чтобы перенаправить удаление на перегруженную версию шахты,

Вам разрешено предоставлять собственное определение operator delete. Это не требует переопределения ключевого слова. В качестве дополнительного преимущества, обеспечивая собственное определение operator delete также влияешь на весь код библиотеки, которая использует delete ключевое слово, даже код библиотеки, который был скомпилирован без учета каких-либо из ваших заголовков, которые, кажется, как-то вы хотите.

Рекомендуется для дальнейшего чтения о том, что, в том числе простой пример: operator delete, operator delete[]

+0

Я предпочел бы закончить после первого предложения :). (Нет, нет). – SergeyA

+0

Спасибо за ответ. Очевидно, что дизайн, который я выбрал, который привел меня к этой проблеме, мог быть проработан (в моем случае с большой болью, но это не главное). Но так как можно определить delete, это может быть случай, когда это может быть полезно. Вот так, и я ничего не нашел на данный момент, обсуждая конфликт между определением delete и функциями = delete в C++ 11 – Ben

+0

@Ben, см. Мой комментарий по вашему вопросу: '= delete' - это не единственное, что брейки. – SergeyA

Смежные вопросы