设计一个类
只能在堆上创建?
只能在栈上创建?
只能创建一个对象?(单例模式**)
C++中创建对象的方法有两种,静态创建和动态创建。
1.静态创建
静态创建是由编译器为对象在栈空间中分配一块内存,通过直接移动栈顶指针,取出需要多大的空间,然后再这块内存上调用构造函数形成一个栈对象。直接调用类的构造函数。
2.动态创建
通过new运算符将对象建立在堆空间中。首先,调用operator new()函数,在堆空间中找适合的内存并进行分配;然后,调用构造函数构造对象,初始化这块内存空间。间接调用类的构造函数。
限制对象只能在什么地方建立?
1.只能在堆上创建?
意思是不能静态的创建对象,即不能直接调用类的构造函数。只能动态创建对象,使用new操作符完成。
方法一:将构造函数设为私有。
想到这种办法的原因是,将构造函数设为私有后,无法再类外调用构造函数来创建对象,只能使用new运算符来建立对象。
但是这种方法是不可行的,因为new运算符执行的过程中有两步,调用operator new()函数,在堆空间中找适合的内存并进行分配。然后,调用构造函数构造对象,初始化这块内存空间。C++提供new运算符的重载,其实只允许重载operator new()函数,而operator函数用于分配内存,无法提供构造功能。