3、定义一个只可以在栈上创建对象的类
如果理解了上一种,就应该知道这里该如何去做。只要我们只提供在栈上获取对象的方式即可,由于栈空间是由操作系统维护了,没有特殊需要,析构函数就没有必要显式给出,代码如下:
class A
{
public:
static A Get_A(int x)
{
return A(x);
}
private:
A(int a = 10)
:_a(a)
{}
private:
int _a;
};
int main()
{
A pa = A::Get_A(9);
A pb = A::Get_A(7);
return 0;
}
只能在栈上或者只能在堆上创建的对象,实现起来原理是一样的,类的构造和析构函数都设置为私有,当我的接口函数提供的方法是从堆中创建的对象时,类就只能在堆上创建对象,当我的接口函数提供的是从栈上直接得到的对象的话,类就只可以在栈上创建对象。需要注意一点的是,创建栈上对象的时候,不可以返回临时对象的引用,这个就不再多解释。