首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
c++11改进我们的程序之垃圾回收(一)
】的更多相关文章
(原创)c++11改进我们的程序之垃圾回收
c#和java中有自动垃圾回收机制,.net运行时和java虚拟机可以管理分配的堆内存,在对象失去引用时自动回收,因此在c#和jva中, 内存管理不是大问题.c++语言没有垃圾回收机制,必须自己去释放分配的堆内存,否则就会内存泄露. 我相信大部分c++开发人员都遇到过内存泄露的问题,而查找内存泄露的问题往往要花大量的精力.要解决这个让人头疼的问题可 以采取一些办法,最有效的办法是使用智能指针!使用智能指针就不会担心内存泄露的问题了,因为智能指针可以自动删除删除分 配的内存. 智能指针是指向动态分…
c++11改进我们的程序之垃圾回收(一)
c#和java中有自己主动垃圾回收机制,.net执行时和java虚拟机能够管理分配的堆内存,在对象失去引用时自己主动回收,因此在c#和jva中, 内存管理不是大问题.c++语言没有垃圾回收机制,必须自己去释放分配的堆内存,否则就会内存泄露. 我相信大部分c++开发者都遇到过内存泄露的问题,而查找内存泄露的问题往往要花大量的精力.要解决这个让人头疼的问题可 以採取一些办法,最有效的办法是使用智能指针!使用智能指针就不会操心内存泄露的问题了,由于智能指针能够自己主动删除删除分 配的内存. 智能…
C++11改进我们的程序之简化我们的程序1
C++11改进我们的程序之简化我们的程序(一) C++11在很多方面可以简化我们的程序开发,我会在“简化我们的程序”这一系列的博文中一一讲到,敬请关注.这次要讲的是:C++11如何通过获取函数模板的返回值类型来简化我们的程序.在谈到简化之前,我们先看一个问题,这个问题也是我前段时间在开发C++版本的linq时遇到的.假设我们现在需要将集合按某种属性分组,就是类似于sql语句中的group by,我们知道group by后面的字段会组成一个唯一的键,得到的结果是按照这个唯一键值的分组.关于grou…
(原创)C++11改进我们的程序之简化我们的程序(八)
本次要讲的是如何通过泛型函数来简化我们的程序. 泛型函数除了之前介绍的一些优点外还有两个重要的优点 1.消除重复逻辑,提高程序的内聚性和健壮性 泛型函数在某种程度上用来弥补泛型类型的不足.通过泛型类型T可以消除一些重复代码,当不同的类型具有相同的行为时,通过泛型擦除类型,达到消除重复简化代码的目的.例如: template<typename T> auto Add(T a, T b)->decltype(a+b) { return a + b; } void TestAdd() { au…
编程语言类别;运行Python程序的方式;变量和常量;Python程序的垃圾回收机制;
目录 编程语言分类 运行Python程序的两种方式 1.交互式 变量与常量 1.变量 2.常量 3.小整数池 垃圾回收机制 编程语言分类 编程语言分为: 1.机器语言:直接用二进制的0和1和计算机(CPU)直接沟通交流,直接操作硬件. 2.汇编语言:用简单的英文标签来表示二进制数,直接操作硬件. 3.高级语言:它并不是指某一种语言,而是包括很多编程语言,比如:PHP.c/c++.Java.C#.python.go等 # 机器语言 优点:不需转换,计算机能直接读懂,执行速度快. 缺点:二进制代码复…
(原创)C++11改进我们的程序之move和完美转发
本次要讲的是右值引用相关的几个函数:std::move, std::forward和成员的emplace_back,通过这些函数我们可以避免不必要的拷贝,提高程序性能.move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝.如图所示是深拷贝和move的区别. 这种移动语义是很有用的,比如我们一个对象中有一些指针资源或者动态数组,在对象的赋值或者拷贝时就不需要拷贝这些资源了.在c++11之前我们的拷贝构造函数和赋值函数可能要这样定义:假设一个A对象内部有一…
(原创)C++11改进我们的程序之右值引用
本次主要讲c++11中的右值引用,后面还会讲到右值引用如何结合std::move优化我们的程序. c++11增加了一个新的类型,称作右值引用(R-value reference),标记为T &&,说到右值引用类型之前先要了解什么是左值和右值.左值具名,对应指定内存域,可访问:右值不具名,不对应内存域,不可访问.临时对像是右值.左值可处于等号左边,右值只能放在等号右边.区分表达式的左右值属性有一个简便方法:若可对表达式用 & 符取址,则为左值,否则为右值.1.简单的赋值语句如:int…
(原创)C++11改进我们的程序之简化我们的程序(七)
这次要讲的内容是:c++11中的tuple(元组).tuple看似简单,其实它是简约而不简单,可以说它是c++11中一个既简单又复杂的东东,关于它简单的一面是它很容易使用,复杂的一面是它内部隐藏了太多细节,要揭开它神秘的面纱时又比较困难. tuple是一个固定大小的不同类型值的集合,是泛化的std::pair.和c#中的tuple类似,但是比c#中的tuple强大得多.我们也可以把他当做一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体使程序更简洁,直观. 基本…
(原创)C++11改进我们的程序之简化我们的程序(六)
这次要讲的内容是:c++11中的lamda表达式. lamda表达式是我最喜欢的一个c++11特性之一,在我的代码中随处可见它的身影,其实在c#3.5中就引入了lamda,java中至今还没引入,要等明年的java8中才有lamda表达式,lamda来源于函数式编程的概念,也是现代编程语言的一个特点.c++11这次终于把lamda加进来了.也许有人要问,lamda有什么好处,为什么要加到c++中来?lamda表达式有这些优点: 声明式编程风格:就地匿名定义你的目标函数或函数对象,不需要额外的写一…
(原创)C++11改进我们的程序之简化我们的程序(四)
这次要讲的是:c++11统一初始化.统一begin()/end()和for-loop循环如何简化我们的程序 初始化列表 c++11之前有各种各样的初始化语法,有时候初始化的时候还挺麻烦,比较典型的如vector和map的初始化. vector<int> v; ;i<;i++) { v.push_back(i); } map<int,int> map; ;i<;i++) { map.insert(make_pair(i,i)); } 这种写法比较繁琐,而且不够直观.现在c…