每日一刷——一个类不能被继承 &类只能在堆上创建对象&类只能在栈上创建对象。

来源:互联网 发布:微积分 清华 知乎 编辑:程序博客网 时间:2024/05/29 16:37

1.设计一个类不能被继承
将父类的构造和析构函数设为私有。
在C++中,子类的构造和析构函数会自动调用父类的构造和析构函数,所以将父类构造和析构设为私有后,子类继承时会由于试图调用父类构造函数而编译出错。
这时可以设计两个接口供外部创建对象

class AA{public:    static AA *GetInstance()    {        return new AA();    }    static void DeleteInstance(AA*pInstance)    {        delete pInstance;    }private:    AA() {};    ~AA() {};};//利用虚拟继承:class AA {      friend T;  private:      AA ();      ~AA ();  };  class BB:virtual public AA{  public:      BB();      ~BB();  };  

2.设计一个类只能在堆上创建对象

  • 在堆上创建对象需要用到动态开辟空间,需要使用new
  • new一个新对象分为两步:
    调用operator new()在堆上查找合适大小的空间分配给新对象;
    调用构造函数构造对象,对新开辟的空间进行初始化

class A
{
protected:
A(){}
~A(){}
public:
static A*create()
{
return new A();
}
void destory()
{
delete this ;
}
};

3.设计一个类只能在栈上创建对象
只有使用new运算符,对象才会建立在堆上,因此,只要禁用new运算符就可以实现类对象只能建立在栈上。将operator new()设为私有即可。

class A  {public:    A(){}    ~A(){}private:    void* operator new(size_t t);    void operator delete(void* ptr);    };
阅读全文
0 0
原创粉丝点击