C++中建立类的对象有两种方式:
(1)静态建立,例如 A a;
静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。
(2)动态建立,例如 A* p = new A();
动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行operator new( )函数,在堆空间中搜索一块内存并进行分配;第二步调用类的构造函数构造对象。这种方法是间接调用类的构造函数。
只能静态创建对象
将new、delete运算符重载为private属性
class A
{
private:
void* operator new(size_t t){} //注意函数的第一个参数和返回值都是固定的
void operator delete(void* ptr){} //重载了new就需要重载delete
public:
A(){}
~A(){}
};
只能动态创建对象
将类的构造函数和析构函数设为protected属性,这样类对象不能够访问,但是派生类能够访问,能够正常的继承(将create设为static原因是:创建对象的时候是A *p = A::create(); 只有静态成员函数才能够通过类名来访问。)
class A
{
protected:
A(){}
~A(){}
public:
static A* create()
{
return new A();
}
static void destroy(A* p)
{
delete p;
}
};
int main()
{
A* p=A::create();
A::destroy(p);
return 0;
}