用于大型程序的工具--异常处理[续3]九、auto_ptr类[接上]5、auto_ptr对象的复制和赋值是破坏性操作 auto_ptr和内置指针对待复制和赋值有非常关键的区别。当复制auto_ptr对象或者将它的值赋给其他auto_ptr对象的时候,将基础对象的所有权从原来的auto_ptr对象转给副本,原来的auto_ptr对象重置为未绑定状态。 auto_ptr strPtr1(new ...
分类:
编程语言 时间:
2014-06-05 08:34:36
阅读次数:
366
用于大型程序的工具--异常处理[续2]八、自动资源释放 考虑下面函数:void f()
{
vector v;
string s;
while (cin >> s)
{
v.push_back(s);
}
string *p = new string[v.size()];
//...
delete p;
}
在正...
分类:
编程语言 时间:
2014-06-05 06:07:27
阅读次数:
393
用于大型程序的工具--异常处理引言: C++语言包含的一些特征在问题比较复杂,非个人所能管理时最为有用。如:异常处理、命名空间和多重继承。 相对于小的程序员团队所能开发的系统需求而言,大规模编程[往往涉及数千万行代码]对程序设计语言的要求更高。大规模应用程序往往具有下列特殊要求: 1.更严格的正常运转时间以及更健壮的错误检测和错误处理。错误处理经常必须跨越独立开发的多个子系统进行[异常处理]。 2...
分类:
编程语言 时间:
2014-06-04 23:00:07
阅读次数:
403
用于大型程序的工具--命名空间引言: 在一个给定作用域中定义的每个名字在该作用域中必须是唯一的,对庞大、复杂的应用程序而言,这个要求可能难以满足。这样的应用程序的全局作用域中一般有许多名字定义。由独立开发的库构成的复杂程序更有可能遇到名字冲突 —— 同样的名字既可能在我们自己的代码中使用,也可能(更常见地)在独立供应商提供的代码中使用。 库倾向于定义许多全局名字 —— 主要是模板名、类型名或函数名...
分类:
编程语言 时间:
2014-06-03 03:50:44
阅读次数:
323
用于大型程序的工具--命名空间[续1]二、嵌套命名空间 一个嵌套命名空间即是一个嵌套作用域 —— 其作用域嵌套在包含它的命名空间内部。嵌套命名空间中的名字遵循常规规则:外围命名空间中声明的名字被嵌套命名空间中同一名字的声明所屏蔽。嵌套命名空间内部定义的名字局部于该命名空间。外围命名空间之外的代码只能通过限定名引用嵌套命名空间中的名字。 嵌套命名空间可以改进库中代码的组织:namespace cpl...
分类:
编程语言 时间:
2014-06-03 01:29:02
阅读次数:
297
用于大型程序的工具--命名空间[续2]五、类、命名空间和作用域 名字的可见性穿过任意嵌套作用域,直到引入名字的块的末尾。 对命名空间内部使用的名字的查找遵循常规C++查找规则:当查找名字的时候,通过外围作用域外查找。对命名空间内部使用的名字而言,外围作用域可能是一个或多个嵌套的命名空间,最终以全包围的全局命名空间结束。只考虑已经在使用点之前声明的名字,而该使用仍在开放的块中:namespace A...
分类:
编程语言 时间:
2014-06-01 09:51:00
阅读次数:
380
用于大型程序的工具--命名空间[续3]六、重载与命名空间 正如我们所见,每个命名空间维持自己的作用域,因此,作为两个不同命名空间的成员的函数不能互相重载。但是,给定命名空间可以包含一组重载函数成员。1、候选函数与命名空间 命名空间对函数匹配有两个影响。一个影响是明显的:using声明或using 指示可以将函数加到候选集合。另一个影响则微妙得多。 正如前节所见,有一个或多个类类型形参的函数的名字查...
分类:
编程语言 时间:
2014-06-01 09:15:16
阅读次数:
353
十七、用于大型程序的工具
1. 优化内存分配
C++类型分配是一个类型化操作:new为特定类型分配内存,并在新分配的内存中构造对象。new表达式会为每个动态分配的类自动调用构造函数。但有些时候需要将内存分配与对象构造分开,因为对预先分配,但以后却不使用的对象进行构造很是浪费的。
C++提供两种方法,分配和释放未构造的的原始内存:...
分类:
编程语言 时间:
2014-05-09 22:26:58
阅读次数:
468
1. 异常处理
异常以类似于将实参传递给函数的方式抛出和捕获。异常可以是可传给非引用实参的任意实参的类型,这意味着必须能够复制该类型的对象。
当抛出一个表达式的时候,被抛出对象的静态编译时类型将决定异常对象的类型。
抛出指针通常是个坏主意。
栈展开:沿着嵌套函数调用链继续向上,直到为异常找到一个catch子句。
栈展开期间,释放局部对象所用的内存并运行类类...
分类:
编程语言 时间:
2014-05-09 06:17:46
阅读次数:
528