在阅读muduo远码时,发现有很多类都是继承于noncopycale:
初看时不解其意,猛然间看懂觉得实在巧妙,我们先来看看noncopycale类到底是啥样的:
namespace muduo
{
class noncopyable
{
public:
noncopyable(const noncopyable&) = delete;
void operator=(const noncopyable&) = delete;
protected:
noncopyable() = default;
~noncopyable() = default;
};
} // namespace muduo
noncopycale的拷贝构造函数和赋值构造函数均被屏蔽了,而默认的构造函数和析构函数被设为protected,这个时候,noncopycale类的意图或者说使用的原因便跃然纸上:
当noncopycale被继承后,其派生类对象可以正常的构造和析构,但是派生类对象无法进行拷贝和赋值操作。那我们的项目中新定义的类如果想屏蔽掉拷贝和赋值函数不需要一一的去屏蔽,只需要继承于noncopycale即可。
**构造函数调用顺序:
基类构造函数--->成员对象的构造函数--->派生类对象的构造函数
析构函数的调用顺序
与构造函数的顺序相反