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));//把最后一小段推入