实现一个只能在堆上生成对象的类

分析

  对象可以在栈上生成,也可以通过new在堆上生成,如果只想要对象在堆上生成则需从类的内部结构入手。

  类对象的构造是通过构造函数实现的,如果将构造函数声明为私有或者保护类型,那么在类外是不能调用构造函数的,在类外面也就不能从栈上生成对象。但这样同时也不能在类外new出一个对象。对此,我们可以在类里定义一个公有的接口返回成员函数new出的对象,之后在类外定义类时,只需调用这个函数即可 ,但这样还有缺陷,因为在类外只能通过类的对象来调用这个成员函数,所以应将这个接口声明为静态的。

实现

class AA
{
private:
    AA(int aa = 0)
        :_aa(aa)
    {}
    //类的防拷贝
    //1.只声明不定义
    //2.声明成私有
    AA(const AA& aa);
public:
    static AA* GetAAObj()
    {
        return new AA;
    }
protected:
    int _aa;
};

int main()
{
    AA* p = AA::GetAAObj();
    //AA aa(*p);    //栈上定义的对象,若想要其定义失败,应使用类的防拷贝
    return 0;
}

猜你喜欢

转载自blog.csdn.net/adorable_/article/details/80084833
今日推荐