c++
文章平均质量分 70
云治
这个作者很懒,什么都没留下…
展开
-
从this指针区别const方法、static方法、与普通方法
Const可以修饰成员方法,void fun()const{} 代表在此函数中不允许对其数据成员做修改。在函数自己内部修改或者是调用普通成员方法修改数据成员都不可以! Static修饰成员方法时,该成员方法的作业域依然是类作用域,但是这个方法中没有我们的自引用指针this,不需要依赖对象去调用。调用方式例如 类::fun();或者也可以用对象.fun()。静态成员方法在类外定义时不需要加static,与普通成员方法的写法无异。原创 2017-11-12 22:07:57 · 387 阅读 · 2 评论 -
智能指针auto_ptr 自己实现
把指针交给对象处理,当程序结束时,对象会被自动调用析构,从而完成指针指向的动态内存的释放。 auto_ptr 就是完成动态内存的管理的 智能指针。 这个版本的auto_ptr 是一个类模板 ,有两个数据成员 bool _Owns 代表拥有权 多个指针可以指向同一块空间(浅拷贝) 但是保证只有一个指针 拥有拥有权.防止内存的多次释放 _Ty _Ptr 代表保存指针的指...原创 2018-07-27 20:46:41 · 282 阅读 · 2 评论 -
智能指针shared_ptr
shared_ptr是一个最像指针的“智能指针”,包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针,可以自由地拷贝和赋值,可以再任意的地方共享它,可以安全地放在标准容器中, Windows下boost的下载安装配置 测试 boost中的shared_ptr源码: #ifndef BOOST_SHARED_PTR_HPP_INCLUDED #define ...原创 2018-07-31 10:42:29 · 323 阅读 · 0 评论 -
智能指针scoped_array 自己实现
scoped_array很像scoped_ptr,它包装了new[ ]操作符(而scoped_ptr包装了new)在堆上分配的动态数组,为动态数组提供一个代理,保证可以正确地释放内存。 使得智能指针能指向数组了。scoped_array的特点如下: 1 构造函数接收的指针p必须是new[]的结果,而不能是new表达式的结果。 2 没有* ->操作符的重载, 3 析构函数采用delet...原创 2018-07-29 11:15:43 · 257 阅读 · 0 评论 -
智能指针 scoped_ptr 自己实现
scoped_ptr是一个很类似auto_ptr的智能指针,他包装了new操作符在堆上分配的动态对象,能够保证在动态创建的对象在任何时候都可以被正确的删除。但scoped_ptr的所有权更加严格,不能转让。一旦scoped_ptr获取了对象的管理权,你就无法再从它那里取回来。 #include <iostream> using namespace std; /* scope...原创 2018-07-29 10:43:24 · 268 阅读 · 0 评论 -
内存管理之set_new_handler()
在用malloc时,一般开辟完成会判断指针是否为空,来保证开辟内存成功。但是使用new时很少判断,当我尝试用new开辟非常大的空间时,运行时会直接崩溃,需要一个处理内存开辟不成功的处理函数了。#include <iostream> using namespace std; void out_of_memory() { cout << "out of memory!" &...原创 2018-07-14 10:16:56 · 333 阅读 · 0 评论 -
深拷贝 浅拷贝 引发的写时拷贝
从一个例子说明浅拷贝是什么 #include <iostream> using namespace std; class string { public: string(const char *str="") { if (str == NULL) { data = new char[1]; *data = '\0'; } else { d...原创 2018-07-24 22:36:12 · 165 阅读 · 0 评论 -
***_cast 类型转化
1、 静态转换(static_cast)static_cast 用于明确定义达到转换,包括编译器允许我们所做的不用 强制转换的安全变换和不太安全但清楚定义的变换。例子:int i=47; double d; d=static_cast<double> (i);2、 常量转换(const_cast)如果从const转换为非const 或从volatile转换为非volatile,就可...原创 2018-07-13 11:22:31 · 349 阅读 · 0 评论 -
c++ 通用链表
之前用c实现的通用链表, 将链表的data域从具体类型转变为 void*指针 ,用c实现时费力气的是指针的赋值和也要做到通用的打印 链接:c实现的通用的双向链表 现在用c++重新实现,思想大都一致: 不采用模板类,而采用虚函数实现多态性,达到通用的目的,data域不存储任何跟类型有关的信息,而是指针,将数据放于抽象类中,由指针与之建立联系。 链表有头指针 尾指针,以及之后的一系列插...原创 2018-07-23 16:25:39 · 1235 阅读 · 0 评论 -
Windows下静态库与动态库的制作与使用
为了代码的共享和可重用,将一些需要反复使用的代码制作成库文件,有两种类型的库文件:静态库和动态库。静态库和动态库是两种共享程序代码的方式,它们的区别是:静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,因此节省了...原创 2018-05-04 11:42:00 · 742 阅读 · 1 评论 -
用一个例子看const与指针、引用、多级指针结合的区别
Const 与 * Const与一级指针结合,必须保证不能间接修改常量的值,常量的地址也不能泄露到不安全的人手里,这个不安全的人指普通指针 和普通引用。 Const 修饰指针才参与类型 , Const 修饰值 与类型无关 。 Const 与 & Const与引用结合,使用引用时需要考虑三点: l 引用是否初始化 l 引用的值是否可以取地址 l 引用的是否是常量,如果是常量需要用常引用。 因为常量在编译阶段已是值,不能取地址。立即数同理。 在汇编代码中,常引用即用一个临时变量保存常量的值,然后对原创 2017-11-21 10:46:55 · 301 阅读 · 2 评论 -
设计模式
设计模式主要分三个类型:创建型、结构型和行为型。 其中创建型有 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一...原创 2019-07-03 12:44:32 · 98 阅读 · 0 评论