关于值类型和引用类型的思考

注:这里的引用类型是广义上的Referrence Type,类似于C#中关于引用类型的定义,包括C++中的引用和指针.更准确的说应该是堆内存指针.

 

已经习惯了C#和Java里的对象即对象指针,在写C++程序中总是面临困扰.

用引用类型?什么时候new而又什么时候delete?在堆内存分配空间比栈更耗时,用什么样的方案最合理呢?

用值类型?传值,以为着内存之间的频繁拷贝,频繁拷贝构造和析构,效率如何平衡?

 

首先是new和delete的问题.我尽量保证在同一个作用域开始时new,结束时delete.一个类中new出来的,在析构中全部delete.在方法中,在一个大括号结束时delete掉其中所有new出来的数据.这样貌似可以把问题最小化.但是在遇到面向接口编程,用父类表示子类时总是不能保证这个原则.对象是由某个工厂类生成的,给其他类调用.在什么时候delete最合适呢?目前我的做法是把工厂方法当做new来看待,在工厂制造对象所在作用域delete.又来一个问题,如果工厂是Singleton的呢?哈,我只有永不删除了,就把它当做是全局变量了,大不了在程序结束时delete

 

以前一直以为指针是很麻烦的东东,传值多简单~!现在发现某些情况下,传值比传指针面临更多的问题.首先是内存的频繁拷贝.不过如果占用空间不是很大的情况下还是可以接受的.毕竟现在计算机的速度非常快.然后就是拷贝构造和析构.弄不好问题就来了.有个例子,我在构造函数中LoadLibrary,在析构中FreeLibrary,在进行赋值操作时,左值和右值都已经构造过了,他们Load同一个Library,赋值时左值析构,右值内存拷贝到左值,此时,Library已经Free掉来,再进行操作都将出现问题.我的解决方案比较麻烦,就是用Flyweight模式,给每个Library一个计数,重复Load只增加计数,析构只减少计数,当计数为0时Free掉.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值