homework-08

1.局部变量生命周期的理解

void main(int argc,char**argv){
int j=3;
{  
  int j=4;
} printf(
"%d ",j); }

输出结果

2.两种内存的申请和释放的方式

void main(int argc,char**argv){
    int j=3;//申请栈内存
    int *q=(int *)malloc(sizeof(int));//申请堆内存
    *q=3;
    free(q);//堆内存释放
    system("pause");
}//栈内存释放

3.unique_ptr理解

unique_ptr构造函数:make_unique<CLASS>(wstring,wstring)

unique_ptr强调指针的独特性,以一个对象只能被一个指针所至,所以unique_ptr不能被复制或跟复制有关的操作使用,只可能用move来更换指向该对象的指针

move函数原型:move(unique_ptr)

如:

share_ptr的理解

share_ptr比较类似与我们常说的指针,可以复制,可以像正常指针一样使用,但是他增加了新的功能,比如:

指针指向的对象会记录当前指向自己的指针数量,如果此数量为0的时候则对象被自动释放掉;

 4.URL分析代码

STL风格代码

 1 const string sperator[3]={"://","/","."};//三种分隔符
 2 string url;//输入的url
 3 vector<string> result;//分割后的字符串存放
 4 getline(cin,url);//输入
 5 size_t start_Index=0;//被分割的每一小段的开始索引地址
 6 size_t temp_end_Index=0;//查询最近的分隔符的中间索引地址,负责比较哪个风格符最近
 7 size_t end_index=url.find(sperator[0],start_Index);//默认开始寻找"://"分隔符
 8 int sperator_num=0;//分隔符的索引,值为0,1,2
 9 
10 while(end_index!=string::npos)
11 {
12     result.push_back(url.substr(start_Index,end_index-start_Index));//加入result模板
13     start_Index=end_index+sperator[sperator_num].length();//跳过分隔符长度,更新下一个将被分割的小段的开始索引地址
14     end_index=string::npos;//置成最大位置,方便比较
15     for(int i=0;i<3;i++)//顺次寻找三个分隔符中索引地址最小的,并选中它为此段的终止索引地址
16     {
17         temp_end_Index=url.find(sperator[i],start_Index);
18         if(temp_end_Index<end_index)
19         {
20             end_index=temp_end_Index;
21             sperator_num=i;
22         }
23     }
24 }
25 result.push_back(url.substr(start_Index,end_index-start_Index));//把最后一小段推入
原文地址:https://www.cnblogs.com/jazzone/p/3428138.html