class HomeForSale { ... }; 每一个不动产代理商都会很快指出,每一件财产都是独特的——没有两件是完全一样的。在这种情况下,为 HomeForSale 对象做一个拷贝的想法就令人不解了。你怎么能拷贝一个独一无二的东西呢?最好让这种类似企图拷贝 HomeForSale 对象的行为不能通过编译:
HomeForSale h1; HomeForSale h2; HomeForSale h3(h1); // attempt to copy h1 - should // not compile! h1 = h2; // attempt to copy h2 - should // not compile!
唉,防止这种编译的方法并非那么简单易懂。通常,假如你不希望一个 class 支持某种功能,你可以简单地不声明赋予它这种功能的函数。这个策略对于拷贝赋值运算符不起作用,因为,就象 Item 5 中指出的,假如你不声明它们,而有人又想调用它们,编译器就会隐式地声明它们。