C++学习笔记---浅谈指针

再读之前,强烈的建议大家去读:(写的太经典了!)

谈C/C++指针精髓(一)

http://hi.baidu.com/wangguang246/blog/item/185462b4041e55c237d3ca15.html
谈C/C++指针精髓(二)

http://hi.baidu.com/wangguang246/blog/item/a7518834160cc287a71e1216.html
引用里面的规则记录如下:
【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值

为NULL的内存。

【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。

【规则3】避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。

【规则4】动态内存的申请与释放必须配对,防止内存泄漏。

【规则5】用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。

我再增加一条关于参数的:如果函数的参数是一个指针,不要指望用该指针去申请动态内存。如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”。强调不要用return语句返回指向“栈内存”的指针,因为该内存在函数结束时自动消亡。比如:

Ps:大家最好再去读读《More Effective C++》中条款?:“尽量的使用new而不用malloc”
指针的利与弊:

现在看看C++机制是如何描述指针的好处。
第一,节省。比如你可以有很多对象,但是如果需要移动它们,拷贝起来很麻烦,但是指针就简单了。
第二,方便。比如指针可以持有对象和函数,你同样可以用对象来持有,但是对象之间转换时很麻烦,指针则简单方便。
第三,通用。指针可以直接访问地址,当然,这个往往就是它被攻击的原因,因为问题常常也是这里出现的,其他类似的也有这样的功能,但是指针开销很小。
第四,灵活。指针和对象之间的关系藕断丝连,实际上通过指针操纵对象很轻便,而且指针体积小,使用指针的时候可以不必关心对象的位置。使用函数指针构建通用程序更是艺术。
第五,大小固化。这有利于持有对象,对于C++模板而言是绝好的工具。
第六,利于共享。如果没有指针,如果你需要共享一个对象,你必须跟踪维护对象,不然,只能保持单例,同时解除封装以便访问透明。
指针的坏处:

Ps:我曾经在一个程序中定义了大量的对象,用来访问数据库,结果程序慢的令人无法忍受。曾经一度怀疑数据库没有优化过,才导致的数据访问过慢,但是建立索引,依旧是奇慢无比。后来,小夏建议我用指针,结果程序变得飞快。

心的:不建议在C++对象传过来传过去,这涉及到拷贝构造函数,每次传递其实都是创建了一个新对象来使用,这样一来太重,开销大,二来这一般是值传递,对于传址需求处理不好,容易引发新的泄漏风险。
 
有利必有弊(百利而无一弊的事情只在传说中),传说中的内存泄露,就是忘记销毁指针申请的空间。因为指针式直接操作内存,希望大家用指针的时候,小心谨慎。一般安全性的做法是在构造函数中申请空间,在析构函数中销毁空间。

Ps:我用过内存泄露检测软件

Compuware.DevPartner.for.Visual.C.Plus.Plus.BoundsChecker.Suite.v8.2集成到VS2005,妈呀卡的我机器实在是不行了,所以安装以后没有用几天就卸载了。建议大家保持良好的编程习惯。

指针与引用

谈指针就不能不说引用,现在区分一下两者。

指针与引用的区别:http://www.yuanma.org/data/2006/1015/article_1662.htm
我强调一下几个观点:
1:引用总是指向某个对象,定义引用时,没有初始化是错误的。
2:给引用赋值修改的是该引用所关联的对象的值,而不是使引用与另一个对象关联。引用一经初始化,就始终指向同一个特定对象。
引用《c++ primer 中文版》中的代码:

 


指针与const限定符


面试的时候不止一次的遇到有人出:const int *p;const *int p; int* const p等等之类的区别?
指向const对象的指针  const double *cptr;
const指针 int errNumb=0;   int *const curErr=&errNumb;
指向const对象的const指针  const double pi=3.14159; const double *const pi_ptr=π


详细请参考这里http://www.cnblogs.com/whyandinside/articles/1542692.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值