C++
文章平均质量分 74
Linux_染尘
宁静致远
展开
-
顺序表的实现
顺序表的实现 顺序表原创 2016-04-09 20:37:06 · 813 阅读 · 0 评论 -
有了malloc/free为什么还要new/delete?
有没有这样的疑惑?既然malloc和new都可以正确的申请动态内存,为什么C++要“多次一举”添加了new? new和malloc有什么本质的不同? 首先malloc/free是C++/C语言的标准库 函数,而new/delete是C++的运算符,虽然两者作用相同,但是性质是不同的。对于C++面向对象的特性而言,非内部数据类型的对象,光用malloc/free无法满足动态对象的要求。 对象在原创 2016-09-28 16:28:37 · 793 阅读 · 0 评论 -
指针参数如何传递内存?
当我们需要调用一个申请内存的函数时,大概想的是将函数的参数定义为一个指针来传递内存吧,但是可以用指针去申请动态内存吗?如下函数GetMemory(str,200):void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char)*num); if(p == NULL) return;}void T原创 2016-09-28 15:56:32 · 548 阅读 · 0 评论 -
STL 二级空间配置器
当程序需要在堆上申请空间时,我们常用的做法是直接malloc / new一块新的内存空间,这块被申请的空间需要我们手动释放,频繁的申请释放必然会导致系统产生大量内存碎片,尤其是小额区块的申请,内存碎片和额外负担很大的损害了我们的内存空间。 在STL中对于内存的申请,有着更高明的手法——allocator(空间配置器)。 一级空间配置器很简单,只是简单的将malloc进行封装,加入了异常处原创 2016-04-25 18:30:19 · 670 阅读 · 0 评论 -
C++ 类的6个缺省函数
在C++中默认产生6个类成员函数,即缺省函数,它们分别是:缺省构造函数缺省拷贝构造函数缺省析构函数缺省赋值运算符缺省取址运算符缺省取地址运算符const很多人以为只有前4个缺省函数,事实上有6个。代码验证如下:#include <iostream>using namespace std;class A{public: A() { cout<<"构造原创 2016-06-10 20:38:53 · 3357 阅读 · 1 评论 -
智能指针之 shared_ptr
shared_ptr是一个最像指针的“智能指针”,是boost.smart_ptr库中最有价值、最重要的组成部分,也是最有用的,Boost库的许多组件–甚至还包括其他一些领域的智能指针都使用了shared_ptr。抱歉,我实在想不出什么更恰当的词汇来形容它在软件开发中的重要性。再强调一遍,shared_ptr非常有价值、非常重要、非常有用。——《Boost程序库完全开发指南》shared_ptr与s原创 2016-05-12 13:28:15 · 11254 阅读 · 1 评论 -
explicit关键字的运用
在C++提供了关键字explicit,可以阻止不被允许的经过构造函数进行的隐式转换的发生。C++中,一个参数的构造函数,承担两个角色。1.是构造器 2.是默认且隐含的类型转换操作。所以当我们定义出 int AAA; 而当恰好将XXX赋给类时,且XXX的类型也是int。那编译器就会自动调用这个构造器,创建一个AAA的对象。在程序中隐式转换为程序员提供了一些便利,但也产生了一些“深度bug”,如以下原创 2016-04-18 22:08:11 · 337 阅读 · 0 评论 -
智能指针之 scoped_ptr
scoped_ptr是一个类似于auto_ptr的智能指针,它包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确的删除。但是scoped_ptr的所有权更加严格,不能转让,一旦scoped_pstr获取了对象的管理权,你就无法再从它那里取回来。正如scoped_ptr(局部指针)名字的含义:这个智能指针只能在作用域里使用,不希望被转让。代码实现如下:template原创 2016-05-12 00:46:24 · 4884 阅读 · 3 评论 -
智能指针之 auto_ptr (pc版与gcc版)
内存管理一直是令程序员头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微的不小心就会导致内存泄漏(memory leak),野指针(wild pointer),访问越界(access denied)等问题。曾几何时,C++程序员无比羡慕JAVE,C#等语言的垃圾回收机制。但C++后来有了更高效的内存管理方法,智能指针的出现,使得C++在内存管理方面做得甚至比JAVE,C#更好。智能指针(s原创 2016-05-11 23:16:46 · 939 阅读 · 0 评论 -
浅谈萃取技术
在STL中,以泛型技术为中心的设计贯穿着整个设计,模板类的运用,使得代码的复用率大大提高。萃取技术是在模板的基础上,采用相同的方式,却可以将不同的东西提取出来。为什么要有萃取技术? 模板实现了程序的泛型化,但当有非模板类型传递时,我们就不能只套用模板,还需要对模板的参数进行加设。template<class T1, class T2>class MyClass{public: M原创 2016-04-24 21:23:25 · 663 阅读 · 0 评论 -
const, volatitle, mutable的用法
本文参照于wuliming_sc博主所写的同名博文。const :不变的,不可被修改的。const修饰普通变量时,一般有两种写法: 1. const TYPE value; 2. TYPE const value; 这两种写法本质上没有区别。含义是:const修饰的类型为TYPE的变量value是不可被修改的。const修饰指针类型时,有三种写法: char* const ptr; 指针原创 2016-04-26 22:46:18 · 685 阅读 · 0 评论 -
c++继承与多态
C++ 继承与多态原创 2016-04-12 16:09:19 · 748 阅读 · 0 评论 -
引用和指针的比较
引用(&)是C++中的概念,初学者容易把引用和指针混淆。在一下程序中,n是m的引用,p是m的指针:int m;int &n = m;int *p = &m;n相当于m的别名,对n操作就是对m操作,n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。引用的一些规则如下: 1.引用被创建的同时必须被初始化(指针则可以在任何时候被初始化). 2.不能有NULL引用,引用必须与合法的储原创 2016-04-27 21:05:28 · 356 阅读 · 0 评论 -
重载运算符
C++ 重载运算符原创 2016-04-12 16:57:31 · 833 阅读 · 0 评论