关闭

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

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

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

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

【C++】STL的重写

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

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

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

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

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

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

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

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

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

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

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

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

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

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

前面我已经非常详细地写了关于new和delete的底层实现原理,这里就讲一下比较轻松的,如何合理地去使用new和delete 和为什么要如此。 如果看完之后还有兴趣继续探究,可以去看我前面的博客——【C++】 深入探究 new 和 delete我们都知道,用new操作符分配单个对象的内存和分配数组对象的方式是不同的,同样,delete操作符针对不同new方式分配的对象也要采用不同的delete方式...
阅读(66) 评论(0)

C++ 模版类 详细讲解

模版类定义直接先说一下模版类的定义:template class 类名 { 内容 }一个小示例如下: template class A { private: T data; public: A(T value) :data(value) {}; T GetD...
阅读(56) 评论(0)

C++ 模版函数 深入浅出

假设我们是一个实验室的学生,实验室老板喊你写一个排序算法排序一个int数组 当然,以我们的聪明才智,很快的就写好了这个函数: bool cmp(const int& a,const int& b) { //a>=b返回true,a= b ; } void Sort(int * begin,int * end, bool(*cmp)(const...
阅读(42) 评论(0)

C++ 类型转换运算符——const_cast

今天看《E ffective C++》提到了关于类型转换的章节,就来对C++的类型转换进行一定的分析和测试吧。 C++提供了四个转换运算符: const_cast (expression) static_cast (expression) reinterpret_cast (expression) dynamic_cast (expression) 它们有...
阅读(103) 评论(0)

【分析】深入探究 C++ 引用

争论 在 c/c++ 中,访问一个变量只能通过两种方式被访问,传递,或者查询。这两种方式是: 通过值 访问 / 传递变量 通过地址 访问 / 传递变量 – 这种方法就是指针 关于引用,我翻看了一些网上的博客和外文文章,看到两种观点: 引用为一个参数的别名(当然,C++ primer 上也是这么说的) 引用其实就是一个常量指针,指向这个对象(所以必须被初始化才能使用,和常...
阅读(52) 评论(0)
45条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:9712次
    • 积分:532
    • 等级:
    • 排名:千里之外
    • 原创:43篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类