【Effective C++】6-若不想使用编译器自动生成的函数,就该明确拒绝

1.一个实例让我们知道可能有时候我们不希望使用编译器自动生成的函数

地产中介商卖的是房子,一个中介软件系统自然而然想必有个class用来描述待售房屋:

class HomeForSale{...};

每一位真正的地产中介商都会说,任何一笔资产都是天上地下独一无二,没有两笔完全相像。因此我们也认为,为 HomeForSale对象做一份副本有点没道理。你怎么可以复制某些先天独一无二的东西呢?因此,你应该乐意看到 HomeForSale的对象拷贝动作以失败收场:

HomeForSale h1;
HomeForSale h2;
HomeForSale h3(h1);
h1=h2;

啊呀,阻止这一类代码的编译并不是很直观。通常如果你不希望class支持某一特定机能,只要不声明对应函数就是了。但这个策略对 copy 构造函数和 copyassignment操作符却不起作用,因为条款 5 已经指出,如果你不声明它们,而某些人尝试调用它们,编译器会为你声明它们。这把你逼到了一个困境。如果你不声明copy构造函数或copy assignment操作符,编译器可能为你产出一份,于是你的class支持copying。如果你声明它们,你的class还是支持copying。但这里的目标却是要阻止copying!

问题:如何不使用编译器自动生成的拷贝函数和拷贝操作符函数?

おすすめ

転載: blog.csdn.net/Edidaughter/article/details/121802218