赞
踩
static是用来声明静态变量、静态函数、类的静态成员、类的静态函数等
对声明静态变量来说共分为两种静态变量
对于函数定义和代码快之外的变量声明,static修改标识符的链接属性,由默认的external变成internal,作用域和存储类型不变
拥有external链接属性的变量可以被所有文件访问,只需要声明一下即可
拥有internal属性的变量只能在其定义的文件中被访问
拥有none属性的变量只能在其定义开始到代码块作用域结束处访问
根据两个矩形的中心距离是否在0-(1/2l1+1/2l2)之间
根据三个顶点加上判断的点,四个点形成的三角形面积之和是否等于大的三角形面积来判断
在另一篇博客中
int hammingWeight(uint32_t n) {
int count = 0;
unsigned int flag = 1;
while(flag)
{
if(n&flag)
{
count++;
}
flag = flag<<1;
}
return count;
}
通过将待判断的数转换为二进制,然后令转换后的数字和1 进行与运算,运算结束后左移一位继续相与,通过计数来判断是否有1
野指针就是指向内存不可用的指针
常见的三种野指针:
1.指针变量没有被初始化
#include <iostream>
usingnamespacestd;
intmain()
{
int* p;
cout<<*p<<endl; //编译通过,运行时出错
}
#include <iostream> usingnamespacestd; int* retAddr() { intnum=10; return# } intmain() { int* p=NULL; p=retAddr(); cout<<&p<<endl; cout<<*p<<endl; }
3.指针释放之后未制空
指针被free或者delete之后,没有置为null,这个时候指针指向的就是垃圾内存,释放后的指针应该立即职位null防止产生野指针
当两个相同的shared_ptr相互引用的时候,会导致shared_ptr指针的引用计数无法归0,也就是所指向的内存始终无法释放;
上述代码中,parent有一个shared_ptr类型的成员指向孩子,而child也有一个shared_ptr类型的成员指向父亲。然后在创建孩子和父亲对象时也使用了智能指针c和p,随后将c和p分别又赋值给child的智能指针成员parent和parent的智能指针成员child。从而形成了一个循环引用,导致计数器无法归0,造成内存泄漏
通过使用weak_ptr指针
弱引用的智能指针weak_ptr是用来监视shared_ptr的,不会使引用计数加一,它不管理shared_ptr内部的指针,主要是为了监视shared_ptr的生命 周期,更像是shared_ptr的一个助手。 weak_ptr没有重载运算符*和->,因为它不共享指针,不能操作资源,主要是为了通过shared_ptr获得资源的监测权,它的构造不会增加引用计数,它的析构不会减少引用计数,纯粹只是作为一个旁观者来监视shared_ptr中关连的资源是否存在。 weak_ptr还可以用来返回this指针和解决循环引用的问题。在使用的时候,把产生循环引用的其中一方shared_ptr修改成weak_ptr 即可解决
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。