Несколько человек предложили сделать конструктор копирования закрытым. Это в основном хорошее решение проблемы, однако оно не является полным. Это все еще позволяет самому типу случайно передавать себя по значению. Более полное решение - объявить конструктор копирования закрытым, а затем никогда не реализовывать его.
class A{
private:
// Prevent value copying
A(const A&);
int _x;
public:
A(int y){
_x = y;
}
};
Примечание. Как указывает @DeadMG, в C ++ 11 использование delete
является предпочтительным.
A(const A&) = delete;