C++实现只能动态或者静态创建对象

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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值