把copy构造函数或copy assignment操作符声明为private
class HomeForSale
{
public:
HomeForSale()
{
}
private:
HomeForSale(const HomeForSale&);
HomeForSale& operator=(const HomeForSale&);
};
HomeForSale h1;
HomeForSale h2;
HomeForSale h3(h1);
h1 = h2;
还有一种方法是设计一个base class,将copy构造函数和copy assignment操作符声明为private
class Uncopyable
{
protected:
Uncopyable() //允许derived对象构造和析构
{
}
~Uncopyable()
{
}
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};
class HomeForSale :private Uncopyable
{
};
HomeForSale h1;
HomeForSale h2;
HomeForSale h3(h1);
h1=h2