关于值类型和引用类型的思考
来源:互联网 发布:网络购物的利弊 编辑:程序博客网 时间:2024/06/05 02:35
注:这里的引用类型是广义上的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掉.
- 关于值类型和引用类型的思考
- 引用类型的思考
- 关于值类型和引用类型的区别和总结
- 关于值类型和引用类型
- 关于c#值类型和引用类型
- 关于值类型和引用类型
- 关于数组的引用类型和值类型
- 关于引用类型和值类型,存储结构的…
- 第三章 用对象思考:值类型和引用类型
- 关于C#的值类型和引用类型,值传递和引用传递的区别
- 关于浮点数类型和布尔类型的思考
- 关于值类型、引用类型和字符串类型的比较问题!通过实例来说明!
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的不同
- 值类型和引用类型的区别
- MIX09大会独家报道 IBM欲64亿收购Sun
- 在Linux的终端和Shell中显示中文时显示乱码的解决办法
- 本人写的stream analysis: support mpeg2,ac3, psi等信息,playback.
- 双动力船模模块
- 响应键盘特定按键(只响应数字键)
- 关于值类型和引用类型的思考
- 过早死=不睡觉+可乐+洗发水+高路洁 (很可怕的,一定要看完........... )
- SP相关
- ...
- 如何让你的SQL运行得更快!【经典】
- Java的参数传递
- Give up
- 计算机编程习惯
- 并发高级 -- 多核编程中的条件同步模式