美文网首页
2020-02-09 -C++基础1

2020-02-09 -C++基础1

作者: hangzhou吴彦祖 | 来源:发表于2020-02-10 10:40 被阅读0次

    一:

    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赋给另一个。

    相关文章

      网友评论

          本文标题:2020-02-09 -C++基础1

          本文链接:https://www.haomeiwen.com/subject/iiwnxhtx.html