C++:设计一个类,该类只能在堆上创建对象

创建对象:需要申请空间,然后在申请的空间上调用构造函数,完成对象的创建

方法:构造函数私有化
1.将构造函数设置为私有的,在类外就防止别人调用;
2.类外不能调用类内的私有成员函数,但类内可以,所以通过在类内实现一个静态成员函数完成对象的创建
3.将拷贝构造函数也要声明成私有的,我们本身不需要,但为了防止别人通过拷贝构造在栈上创建对象(PS:步骤3 是C++98中的,还有简单的,不用管权限,在C++11中,delete不仅可以释放空间,还可控制默认的成员函数,它告诉编译器:删除拷贝构造函数 )

#include<iostream>
using namespace std;
class HeapOnly
{
public:
 static HeapOnly* CreateObject()//静态成员函数可以不通过对象调用
 {
  return new HeapOnly;
 }
 ~HeapOnly()
 {}
private:
//C++98
 HeapOnly(const HeapOnly&);//只给声明(我们不需要实现)
 //在C++11,下面这个更方便,因为不用管权限
 //HeapOnly(const HeapOnly&) = delete;//不用管权限
private:
 HeapOnly()//构造函数
 {}
};
int main()
{
 HeapOnly *p = HeapOnly::CreateObject();//在堆上创建对象(1.开辟空间2.调用构造函数)
 return 0;
}
发布了73 篇原创文章 · 获赞 2 · 访问量 2854

猜你喜欢

转载自blog.csdn.net/weixin_43219708/article/details/104233628