条款05:了解C++默默编写并调用哪些函数
请记住:编译器可以暗自为class 创建default构造函数、copy构造函数、copy assignment 操作符,以及析构函数。
但是如果成员变量中有const 或者& 编译器将拒绝执行copy构造函数和copy assignment 操作符。
如果base classes 将copy assignment 操作符声明为private ,编译器将拒绝为其derived classes 生成一个copy assignment 操作符。
条款06:若不想使用编译器自动生成的函数,就改明确拒绝
可以采用如下操作,声明一个base classes 屏蔽编译器自动生成的函数
class Uncopyable
{
protected:
Uncopyable(){} //允许derived 对象构造和析构
~Uncopyable(){}
private:
Uncopyable(const Uncopyable&); // 但阻止copying
Uncopyable& operator=(const Uncopyable&);
};
class HomeForSale:private Uncopyable
{
...
}也可以在Boost 中有个名为noncopyable的class
请记住:为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。使用想Uncopyable这样的base class 也是一种做法。
本文探讨了C++中编译器如何默以为类创建默认构造函数、拷贝构造函数等,并介绍了如何通过声明这些函数为私有来阻止编译器自动生成它们的方法。
477

被折叠的 条评论
为什么被折叠?



