一般导致程序崩溃的最重要原因之一就是试图解引用NULL指针。正如上几篇文章中所说的,智能指针RefCountPtr和ScopedPtr提供了运行时的诊断。但是,并不是所有的指针都是拥有某个对象所有的智能指针。因此为了对试图解引用一个不具有对象所有权的指针的行为进行诊断,引入一种并不删除它所指向的对象的“半智能”指针。例如,如下代码示例:
template
class Ptr
{
public...
分类:
其他好文 时间:
2014-07-18 12:32:26
阅读次数:
246
详解C++中的引用,通过对以变量和对象为参数的三种传参方式的比较,介绍引用的概念及使用,适合初学者学习。...
分类:
编程语言 时间:
2014-06-15 14:50:21
阅读次数:
357
解析:CLR支持两种类型:值类型和引用类型。用Jeffrey Richter(《CLR via
C#》作者)的话来说,“不理解引用类型和值类型区别的程序员将会把代码引入诡异的陷阱和诸多性能问题”。这就要求我们正确理解和使用值类型和引用类型。
值类型包括C#的基本类型(用关键字int、char、flo...
分类:
Web程序 时间:
2014-05-30 00:45:37
阅读次数:
341
一 C++中表达式的分类
传统C++的变量表达式分为左值和右值。通俗来讲,两者有着如下区别:
1.从生命周期上来看:左值就是非临时对象,那些可以在多条语句中使用的对象。所有的变量都满足这个定义,在多条代码中都可以使用,都是左值。右值是指临时的对象,它们只在当前的语句中有效;
2.左值是有名字的(通过其他具名对象间接得到的,例如通过返回引用的函数,或通过指针解引用(* 运算符)),有固定的存放...
分类:
编程语言 时间:
2014-05-22 08:43:44
阅读次数:
428
编译程序仅仅能查找出程序的语法错误,而对于“数组越界访问”“对空指针解引用”等错误,编译程序是束手无策的。
同时我们知道测试人员所使用的黑箱测试方法所能做的只是往程序里填数据,并看它弹出什么。这就决定了
对程序错误的检测可能需要点运气。
假如编译程序能够检测出“数组越界访问”,“差一错误”等等错误,那么编写无错代码其实就要简答多了。
所以我们需要一个思维转变:...
分类:
编程语言 时间:
2014-05-10 04:56:43
阅读次数:
382
一、引用的本质是什么
说到引用,一般C++的教材中都是这么定义的:
1,引用就是一个对象的别名。
2,引用不是值不占内存空间。
3,引用必须在定义时赋值,将变量与引用绑定。
那你有没有想过,上面的定义正确吗?编译器是如何解释引用的?
这里先给出引用的本质定义,后面我们再进一步论证。
1,引用实际是通过指针实现的。
2,引用是一个常量指针。
3,引用在内存中...
分类:
编程语言 时间:
2014-05-01 18:06:17
阅读次数:
388