c++使一个对象可以在堆上创建,但是不能在栈上创建。
步骤一:使类的所有构造函数私有化
Class A
{
Private:
A(){}
};
Int main()
{
A a;//在栈上创建对象,会出现编译错误
}
这时,已经实现了禁止对象在栈上的创建,但是同时也禁止了对象的实例化,也就是说类A也不能在堆上创建,为了实现能够在堆上创建A类的对象,请进行第二步操作。
步骤二:
Class A
{
Public:
Static A* newInstance()
{
Return new A;
}
Private:
A(){}
};
Int main()
{
A a;//在栈上创建对象,会出现编译错误
A* a = A::newInstance();//成功在堆上创建对象
}
这时出现了内存泄漏,因为在堆上分配的内存无法释放掉,为了实现内存的释放,请进行第三步操作。
步骤三:
Class A
{
Public:
Static A* newInstance()
{
Return new A;
}
Static void deleteInstance(A* a)
{
If (a != NULL)
{
Delete a;
}
}
Private:
A(){}
};
Int main()
{
A a;//在栈上创建对象,会出现编译错误
A* a = A::newInstance();//成功在堆上创建对象
A::deleteInstance(a);//成功释放内存
}