Вкратце: есть ли способ изменить определение класса так, чтобы он не компилировался в точке использования конструктора копирования независимо от того, где он используется?
У меня очень большой проект и я чистил некоторые определения классов. Есть класс, в котором я явно не хочу использовать конструкторы копирования (давайте проигнорируем причины этого в интересах данного обсуждения), и в интересах безопасности я решил просто определить конструктор копирования как private и не реализовывать его... таким образом, он будет выдавать ошибку компиляции, если я попытаюсь использовать его где-либо. И вот, он компилируется нормально, но у меня ошибка компоновщика... реализация конструктора копирования не найдена! Предположительно это означает, что он где-то используется, но я не могу найти, где он используется. Кстати, это Visual Studio 2010. Поэтому мой вопрос заключается в том, могу ли я как-то изменить определение класса так, чтобы он не компилировался в точке использования?
class Sample {
private:
// not implemented
Sample( const Sample& rhs );
Sample& operator=( const Sample& rhs );
public:
// implemented
Sample();
...
};
Sample *samp1 = new Sample;
Sample *samp2 = new Sample( *samp1 ); // <<-- inaccessible here! this works
Предположительно, поскольку я не получаю ошибку компиляции, но получаю ошибку компоновщика, это означает, что сам класс (или его друг) выполняет копирование-конструирование create (поскольку это все, что имеет доступ к частному конструктору), но я не могу его найти!