关闭

[置顶] 【C++】 深入探究 new 和 delete

在C++中,我们应该经常会用到new、delete,它们是C++的一个关键字,同时也是一个操作符,下面我将我对这两者的了解和学习做一个总结和探讨。new和delete的全过程首先我们定义一个对象A: struct A { size_t h; };当我们使用关键字new在堆上动态创建一个对象A时,比如 A* p = new A(),它实际上做了三件事: 向堆上申请一块内存...
阅读(329) 评论(0)

探究C++中的成员函数指针和虚函数表

say something相信对C++对象有一定了解的话,应该都会知道,在C++中对象的实现中,成员函数和成员变量是分离的 所以我们所谈到的非静态成员函数其实只是一个普通的函数(不过被编译器所隐藏,必须绑定到特定的对象上才能执行) 静态成员函数实际上就真的就是一个普通的函数,独立于整个对象之外,不过被编译器加上了一堆修饰避免重命名,和对象无关 普通非静态成员函数的实现是通过传入this指针的方...
阅读(40) 评论(0)

STL中的空间配置器allocator的实现原理及源码剖析

allocator是STL为自己的模版容器所设计的标准空间配置器。处于std命名空间下 今天我要讲的的allocator的源码在我的github上,地址为 mySTL 是我模仿标准STL写出的代码,并添加了注释。allocator简介allocator为一个模版类,我们使用的时候一般都会将其绑定到一个具体的类型上。如下:allocator alc;allocator大致需要实现如下功能:...
阅读(73) 评论(0)

STL中的deque及源码实现 std::deque

本博客中涉及到的所有代码均在我的github上存放,地址:mySTL如果有兴趣的话可以去下载查看,注释比较详尽。说点什么相信大家如果对C++有一定的了解的话,都会知道C++中有STL这个超大的模版库,这个模版库提供了非常多的模版容器和模版算法,如常用的vector、list、stack、queue、map、set等等容器,sort、find_if、find、swap等模版函数 这个库由于创建时间过...
阅读(129) 评论(0)

对C++中的this指针的分析

一个示例首先让我们观察如下代码:namespace ClassTest { class A { private: int m_int1; int m_int; static int st_int; public: void test1() { cout << "test1" << endl; }...
阅读(89) 评论(0)

【C++】不能将“this”指针从“const vector”转换为“vector & rhs"

最近在写STL,在对stack的swap函数进行测试的时候,出现了这个问题,由于是第一次见,我独自想了很久也有点迷糊,搜索调试弄了半天终于解决了,以下是出问题的代码: template bool vector::operator ==(const vector& rhs)const { if (size()...
阅读(95) 评论(0)

【C++】STL的重写

最近在写一个注释比较靠谱的STL项目,由本人独立编写,参考书籍为《Effective C++》、《C++ Primer》、《STL源码剖析》等 准备完成的内容为: - 大部分的容器 - 大部分的泛型算法 - 空间配置器 - 适配器 - 型别萃取器 - 迭代器现在已经实现了如下的东西:型别萃取、vector、Alloc空间配置器、迭代器型别萃取、一些泛型算法(后期才会着重编写...
阅读(69) 评论(0)

【C++】MFC中的CString和std::string,以及两者之间的相互转换(基于VS201X版本)

最近学了两天MFC,发现还比较有意思,准备过一段时间买一本《深入浅出MFC》,去好好学一下图形界面的框架以及其内部对系统调用的使用。 在使用MFC的时候,虽然界面和其表面逻辑框架都是使用MFC的,但其实大部分的内部逻辑我还是使用C++原生库去写的,比如今天花了两个小时写了两个MFC小程序——输入型多项式计算器(中缀转后缀,支持加减乘除括号的混合运算)、一个简单的汉英词典软件(解决一下自己平常打代码...
阅读(137) 评论(0)

【C++】STL中map的详细使用说明

说明std::map是一个有序关联容器,包含具有唯一键的键值对key-value。键使用比较函数Compare比较来进行排序。 搜索,删除和插入操作具有对数复杂性。****map通常实现为红黑树。 定义于头文件 特别注意,map中同一个键值只能存在一个实体 map的特点是增加和删除节点对迭代器的影响很小,除了那个被操作的节点,对其他的节点都没有什么影响(只是内部的一些指针指向的...
阅读(72) 评论(0)

【C++】动态内存管理(五)使用STL容器进行大量的动态内存管理

相信我们平时使用C++的时候都会用到STL里面的很多容器,可以发现,对于这些容器里面的数据,当容器的生命周期到达结束的时候,里面的数据就会被很好地释放掉。 但是对于处于堆上和堆栈的不同数据,使用的方法也有所不同。 我们以以下的对象作为被操作者: class Simple { public: string name; private: s...
阅读(121) 评论(0)

【C++】动态内存管理(四)智能指针(std)

智能指针总结 对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。所有智能指针都重载了“operator->”操作符,直接返回对象的引用,用以操作对象。访问智能指针原来的方法则使用“.”操作符。 访问智能指针包含的裸指针则可以用 get() 函数。由于智能指针是一个对象,所以if (my_smart_object)永...
阅读(137) 评论(0)

【C++】动态内存管理(三)不同的资源管理对象的实现

这里我就直接贴代码然后进行说明了。拷贝型资源管理对象对于普适性的资源,比如string、vector、array等资源,我们通常采用拷贝的方式进行资源的赋值操作 下面是这种资源管理对象的基本构造: template class Data { private: T* pointer; public: Dat...
阅读(74) 评论(0)

【C++】动态内存管理(二)以对象管理资源

为什么要用对象去管理资源? 考虑如下情况。 我们声明一个对象A:class A { private: int value; public: A(int v):value(v) {}; A() { cout << "creat A" << endl; } ~A() { cout << "delete A" << e...
阅读(65) 评论(0)

【C++】new和delete面对简单类型时可以不成对使用的原因

内置类型和简单类型为何可以不用配对?当使用简单类型(没有默认析构) 比如如下代码:void test() { int* lis = new int[100]; delete lis; }或者只有简单数据的结构体:struct node { int a; int b; int *c; }; void test() { node* lis = ne...
阅读(97) 评论(0)

【C++】动态内存管理(一)成对使用new和delete时要采取相同形式

前面我已经非常详细地写了关于new和delete的底层实现原理,这里就讲一下比较轻松的,如何合理地去使用new和delete 和为什么要如此。 如果看完之后还有兴趣继续探究,可以去看我前面的博客——【C++】 深入探究 new 和 delete我们都知道,用new操作符分配单个对象的内存和分配数组对象的方式是不同的,同样,delete操作符针对不同new方式分配的对象也要采用不同的delete方式...
阅读(91) 评论(0)
49条 共4页1 2 3 4 下一页 尾页
    个人资料
    • 访问:14045次
    • 积分:618
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:2篇
    • 译文:1篇
    • 评论:0条
    文章分类