как я могу найти, где используется конструктор копирования C++, по ошибке компиляции?

Вкратце: есть ли способ изменить определение класса так, чтобы он не компилировался в точке использования конструктора копирования независимо от того, где он используется?

У меня очень большой проект и я чистил некоторые определения классов. Есть класс, в котором я явно не хочу использовать конструкторы копирования (давайте проигнорируем причины этого в интересах данного обсуждения), и в интересах безопасности я решил просто определить конструктор копирования как 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 (поскольку это все, что имеет доступ к частному конструктору), но я не могу его найти!

5
задан mark 27 January 2012 в 17:16
поделиться