C++程序员编码过程中经常会使用string(wstring)类,你是否思考过它的内部实现细节。比如这个类的迭代器是如何实现的?对象占多少字节的内存空间?内部有没有虚函数?内存是如何分配的?构造和析构的成本有多大?笔者综合这两天阅读的源代码及个人理解简要介绍之,错误的地方望读者指出。首先看看stri...
分类:
编程语言 时间:
2015-11-30 07:16:25
阅读次数:
259
malloc/free和new/delete的区别和联系?它们都是动态管理内存的入口。malloc/free是C/C++标准库的函数,new/delete是C++操作符。malloc/free只是动态分配内存空间/释放空间。而new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员)。malloc/free需要..
分类:
其他好文 时间:
2015-11-27 15:06:16
阅读次数:
142
原创文章,欢迎转载。转载请注明:关东升的博客 与构造过程相反,实例最后释放的时候,需要清除一些资源,这个过程就是析构过程。在析构过程中也会调用一种特殊的方法deinit,称为析构函数。析构函数deinit没有返回值,也没有参数,也不需要参数的小括号,所以不能重载。 下面看看示例代码:class Rectangle {
var width: Double
var he...
分类:
编程语言 时间:
2015-11-25 11:03:35
阅读次数:
139
转载:http://dsqiu.iteye.com/blog/1734640条款一 数据抽象抽象数据设计遵循步骤:(1)为类型取一个描述性的名字。(2)列出类型所能执行的操作,不要忘了初始化(构造函数),清理(析构函数),复制(复制操作)以及转换(不带explicit关键字修饰的但参数构造函数和转换...
分类:
编程语言 时间:
2015-11-24 12:37:26
阅读次数:
197
条款26:尽可能延后变量定义式的出现时间有些对象,你可能过早的定义它,而在代码执行的过程中发生了导常,造成了开始定义的对象并没有被使用,而付出了构造成本来析构成本。所以我们应该在定义对象时,尽可能的延后,甚至直到非得使用该变量前一刻为止,应该尝试延后这份定义直到能够给它初值实参为止。这样做的好处是:...
分类:
编程语言 时间:
2015-11-22 18:44:13
阅读次数:
202
条款05:了解C++默默编写并调用哪些函数默认构造函数、拷贝构造函数、拷贝赋值函数、析构函数构成了一个类的脊梁,只有良好的处理这些函数的定义才能保证类的设计良好性。当我们没有人为的定义上面的几个函数时,编译器会给我们构造默认的。当成员变量里有const对象或引用类型时,编译器会不能合成默认的拷贝赋值...
分类:
编程语言 时间:
2015-11-22 17:26:47
阅读次数:
233
在c++开发中,用来做基类的析构函数一般都是虚函数。 为什么会这样呢?原因就是: 当用基类的指针删除一个派生类的对象时,如果基类的析构函数不是虚函数,那么派生类的析构函数不会调用(基类的析构函数会)。 而类的析构函数里一般是释放内存资源,析构函数不被调用的话会造成...
分类:
其他好文 时间:
2015-11-21 19:44:15
阅读次数:
132
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual...
分类:
编程语言 时间:
2015-11-20 17:06:45
阅读次数:
159
题目传送门题意:贪吃蛇,要求长度奇数的蛇转弯次数为正奇数,长度偶数转弯次数为正偶数,且组成矩形。(北大出的题咋都和矩形相关!!!)分析:构造找规律,想到就简单了。可以构造 宽:(n + 1) / 2, 长(n + 1) * n / 2 / (n + 1) / 2的矩形;n = 51 2 4 4 53...
分类:
其他好文 时间:
2015-11-19 19:06:06
阅读次数:
148
vector的内存会不会泄露?
即使不泄露,怎么能缩小所占空间呢?我们知道vector有个clear()方法?原型:#include
void clear();函数clear()删除储存在vector中的所有元素. 如果vector的元素是一些object, 则它将为当前储存的每个元素调用它们各自的析构函数(destructor). 然而, 如果vector储存的是指向对象的指针...
分类:
其他好文 时间:
2015-11-19 13:18:33
阅读次数:
106