代码改变世界

homework-08

2013-11-18 13:12  adun_li  阅读(128)  评论(0编辑  收藏  举报

这次作业是考察关于C++的一些使用,由于我的C++只掌握了基本功,所以我只有霸王硬上弓,勉强写写自己的浅见。

 

1. 理解C++变量的作用域和生命周期

 

对一个C++变量来说,有两个属性非常重要:作用域和生命周期,它们从两个不同的维度描述了一个变量--时间和空间。顾名思义,作用域就是一个变量可以被引用的范围,如:全局作用域、文件作用域、局部作用域;而生命周期就是这个变量可以被引用的时间段。不同生命周期的变量,在程序内存中的分布位置是不一样的。一个程序的内存分为代码区、全局数据区、堆区、栈区,不同的内存区域,对应不同的生命周期。

全局变量

  • 作用域:全局作用域
  • 生命周期:程序运行期一直存在

全局静态变量

  •  作用域:文件作用域
  • 生命周期:程序运行期一直存在

静态局部变量

  • 作用域:局部作用域
  • 生命周期:程序运行期一直存在

局部变量

  • 作用域:局部作用域
  • 生命周期:程序运行出局部作用域即被销毁

 

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int lyd=1;
 5 extern int lyd;
 6 
 7 int main(){
 8   cout<<lyd<<end1;
 9   return 0;
10 }

 

2.理解堆和栈,两种内存的申请和释放的方式

 

申请方式:

stack: 由系统自动分配。  

heap: 需要程序员自己申请,并指明大小,在C++中malloc 函数
   

释放方式:

stack: 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。  
heap: 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。

 

#include<iostream>
using namespace std;

int a = 0; 
char *p1;

main(){
  int b;  
  char s[] = "abc"; 
  char *p2
  char *p3 = "123456";  
  static int c =0;
  p1 = (char *)malloc(10);
  p2 = (char *)malloc(20);
  strcpy(p1, "123456");
}

 

3. 理解unique_ptr和shared_ptr

 

unique_ptr是一种定义在<memory>中的智能指针。它持有对对象的独有权——两个unique_ptr不能指向一个对象,不能进行复制操作只能进行移动操作。unique_ptr在超出作用域,即以下情况时它指向的对象会被摧毁。

shared_ptr是一种智能指针。作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。

 

4. 请尝试用“C++0x”,“C++11 & STL”两种不同的代码风格分割一个url,并上传代码到博客上。

 

由于接触URL比较少,要用两种代码风格分割URL,实在是有些困难。这里写一下URL简介,URL是统一资源定位符(Uniform Resource Locator,缩写为URL)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

 

小结:总体感觉C++是比较博大精深的,值得去钻研探索,如果用好的话,能在很多方面有很大的帮助。长姿势了!