C ++ Не копируемый, за исключением случаев

Я считаю, что создание класса, не подлежащего копированию, очень помогает мне с качеством моего кода. Изначально я сделал это с помощью boost :: noncopyable, но обнаружил, что ошибки компилятора VC ++ не так полезны, как с частными членами (двойной щелчок приводит к неправильному месту в коде).

T(T const&);
T& operator=(T const&);

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

Есть ли хороший способ сделать это? Я думал, например, о том, чтобы оставить два вышеупомянутых метода закрытыми и добавить общедоступный конструктор T (T const &, bool dummy) для вызова, когда я действительно хочу скопировать конструкцию. Или, в качестве альтернативы, сделать два вышеуказанных метода общедоступными и каким-то образом активировать предупреждение компилятора при копировании, подавляя предупреждение там, где я хочу.

Или, может быть, есть лучший способ?

7
задан Cookie 7 July 2011 в 18:53
поделиться