实现方式:
- 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。
- 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。
//设计一个类,只能在堆上创建对象
class HeapObj
{
public:
//提供一个静态的成员函数调用构造函数创建对象
static HeapObj* getObj()
{
return new HeapObj;
}
//禁止构造函数的调用:私有
private:
HeapObj()
{}
//防拷贝
//只声明不实现(c++98)
//HeapObj(const HeapObj&);
//或者声明为delete函数(c++11)
HeapObj(const HeapObj&) = delete;
};
void test()
{
//HeapObj h; //不能创建对象
HeapObj* ptr = HeapObj::getObj();
//HeapObj copy(*ptr); //不能拷贝
}