美文网首页
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

    一: 1:全局静态变量 存储再静态存储区;整个程序运行期间一直存在。 初始化:自动初始化为0,自动对象的值是任意的...

  • 《大学专业生涯 计划书单》

    1、基础中的基础 →C++ 《C++Primer》 《EffectiveC++》 《Inside the C++ ...

  • C++面向对象基础(二)

    目录 C++ 基础(一) C++面向对象基础(二) 一、类 C++ 中可以使用 struct、class 来定义一...

  • C++基本概念复习_2018-06-25

    C++基础 (1)C和C++的区别 C++分为: C部分(区块、语句、预处理器、内置数据类型、数组、指针等); 面...

  • Allen Kashiwa的游戏开发信息

    1 基础知识与通用技能 1.1 语言相关 1.1.1 C/C++ C++ Primer 1.1.2 C# C# 编...

  • C++ 、java 和 C# 的区别

    一、基础类型 c++: ** java:** C#: 二、指针 1.java 是没有指针这个概念,c++ 和 c#...

  • C++学习笔记之C++基础

    1、C++学习计划 (1)基础语法(复习)——初步了解,基础编程(2)核心编程——面向对象(3)提高编程——泛型编...

  • C到C++的升级

    1、C++ C++继承了所有的C特性 C++在C的基础上提供了更多的语法和特性 C++的设计目标是运行效率与开发效...

  • C++知识50问

    C++知识50问1、C和C++的区别?C++相对于C的优势。答:C是C++的基础,C++是C的超集。C是一个结构化...

  • 《C++ 面向对象程序设计》十问

    设计十个基础问题,用于初学者考察自己对《C++ 面向对象程序设计》的学习进展。 基础十问 1、C与C++的关系是什...

网友评论

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

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