看网上的方法,三种当中的一种是,实现一个父类:
class uncopyable{
protected:
uncopyable(){}
~uncopyable(){}
private:
uncopyable(const uncopyable&);
uncopyable& operator=(const uncopyable&);
}
然后让子类继承父类,这里我一直对public private protected理解不透,子类继承为啥一定要private,还有就是类uncopyable为啥将构造和析构设置为protected???
关于public private protected,有没有好的介绍资料,网页or书都ok.
###· 既然是 uncopyable
那自然就是不可拷贝的,那拷贝构造和赋值函数自然要是私有的(连子类也不能调用否则就不是uncopyable了),你也可以使用
uncopyable(const uncopyable&) = delete;
uncopyable& operator=(const uncopyable&) = delete;
简洁明了
· 把构造函数和析构函数设为protected的确不是个明智的办法,因为哪怕你在子类中重载了构造函数和析构函数,你也无法藉由基类指针来析构对象,这样的话很多功能比如智能指针都会报错。
如果只是想阻止别人实例化对象的话而只将其作为接口的话,你完全可以使用纯虚类来完成。
public:
uncopyable() {}
virtual ~uncopyable() = 0;
###
- 子类继承不是要private吧,public或者protected都行。
-
对于nocopyable的构造函数和析构函数
- 不能是public,否则外部可以直接构造nocopyable
- 不能是private,否则派生类没法访问,派生类没法构造
- 只能是protected,基类protected属性在派生类中可以访问
- 继承权限关系