一:
1:全局静态变量
存储再静态存储区;整个程序运行期间一直存在。
初始化:自动初始化为0,自动对象的值是任意的。
作用域:在声明他的文件之外是不可见的。但是,如果在某头文件中定义了一个静态全局变量,并且include了该头文件,那么就是另外一回事了。
2:局部静态变量
内存中的位置:静态存储区
作用域:仍为局部域,当定义他的函数或者语句块结束的时候,作用域结束,但是其并没有被销毁,不能对其访问直到该函数再次被调用并且值维持不变。
3:静态函数
函数返回类型前加static 静态函数只在声明他的文件可见,不能被其他文件所使用。不会同其他文件的cpp的同名函数发生冲突。
4:类的静态成员
在类中,静态成员可以实现多个对象之间的数据共享。
5:类的静态函数
在静态成员函数中不能直接引用类的非静态成员,可以引用类中的静态成员。调用静态成员函数使用以下格式《类名》::《静态成员函数名》(《参数列表》)
二: 说一下C++四种cast转换
static-cast
1:其中子类指针转换为父类为安全的 向上转换安全,基本数据转换,static-cast不能用于无关类型的转换
2:dynamic-cast
用于动态类型转换 只能用于含有虚函数的类,他能安全的将指向基类的指针类型转型为指向子类的指针,并获知转型成功与否。会进行类型安全检查RTTI。使用了VTABLE中的信息来判断实际的类型。
3:const-cast 修改(去除)类型的const特性
4:reinteroret-cast
三:智能指针
智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束的时候忘记释放,造成内存泄漏。智能指针是一个类 当超过了类的作用域,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理是 在函数结束的时候自动释放内存空间,不需要手动释放。
1:shared-ptr
shared-ptr实现共享拥有概念,多个智能指针可以指向相同对象。该对象和相关资源会在最后一个引用被销毁时候释放。资源可以被多个指针共享;可以通过use-count来查看资源所有者的个数;当我们调用release时候,当前指针会释放资源所有权,计数-1.当计数等于0时候,资源被释放。
shared_ptr<Test> ptest(new Test("123"));
shared_ptr<Test>ptest(new Test("456"));
ptest= ptest2; //"456"引用计数加1,123销毁
ptest.count()<<ptest2.count() <<endl //2 2
ptest.reset();ptest释放所有权
ptest2.usecount() 1
ptest2.reset(); //此时456销毁
2 weekptr
weakptr是一种不控制对象生命周期的智能指针,指向一个shared_ptr管理的对象;他的构造和析构函数不会引起引用计数的增加和减少,weakptr主要是用来解决shared-ptr相互引用引起的死锁问题; 例子在工程代码中,两个fun函数中 两个资源的引用计数都为2,当跳出函数时候,智能指针pa pb析构两个资源引用计数会 减1.如果把类A里面的成员变量pb改为weak-ptr b;这样的话资源B的引用开始就只有1;当pb析构时,B的计数变为0;B得到释放;B释放的同时也会使得A的计数减1;同时pa析构时候使得A的计数减1,那么A的计数为0;A得到释放。注意:成员变量是weakptr应该先把他转为sharedptr。调用lock函数。
3:unique-ptr
unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。它对于避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”)特别有用。C++有一个标准库函数std::move(),让你能够将一个unique_ptr赋给另一个。
网友评论