您的位置:首页 > 其它

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

2017-07-15 21:24 405 查看
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);
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐