Вкратце: есть ли способ изменить определение класса таким образом, чтобы он не компилировался в точке использования конструктора копирования независимо от того, где он используется?
IУ меня был очень большой проект, и я очищал некоторые определения классов.Есть класс, в котором я явно не хочу использовать конструкторы копирования (давайте проигнорируем, почему это делается для обсуждения), и в интересах безопасности я решил, что просто определю конструктор копирования как закрытый, а не какна самом деле реализовать его ... таким образом, он будет выдавать ошибку компиляции, если я попытаюсь использовать его где-нибудь.И вот, он прекрасно компилируется, но у меня есть ошибка компоновщика ... Реализация конструктора копирования не найдена!Предположительно это означает, что он где-то используется, но я не могу найти, где он используется.Это 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
Предположительно, так как я не нажимаю на ошибку компиляции, но нажимаюошибка компоновщика в том, что это означает, что сам класс (или друг) выполняет создание, созданное при копировании (поскольку это все, что будет иметь доступ к приватному конструктору), но я точно не могу его найти!