随笔分类 - C++
摘要:一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 d
阅读全文
摘要:若所有参数都需要类型转换: 如果是成员函数: 因为上面的两局可以转换成: 如果构造函数是explicit的,那么两种都会失败 所以通常会被弄成一个非成员函数: 至于是否应该是friend则需要看情况。 模板template: 但是上面的方法在涉及到模板的时候会出现问题。 我们会希望编译器能够通过隐式
阅读全文
摘要:转载:http://blog.csdn.net/liuzhi1218/article/details/6993135 循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象。一个简单的例子如下: 运行该程序可以看到,即使退出了test函数后,由于parent
阅读全文
摘要:转载:http://blog.csdn.net/szchtx/article/details/12000867 在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是
阅读全文
摘要:互斥锁: 假设我们要在多线程中实现背景图片的控制: 但是上面这些会遇到两个问题: 如果 new Image(imgSrc)发生了异常,那么unlock就不会被执行,会被一直锁住 发生上面异常,imageChanges也被累加,但实际上新的图片没有被安装 对于第一个问题: 被及时释放的互斥锁: sha
阅读全文
摘要:注意类型转换: C++提供了四种新式类型转换: static_cast 和 旧式转换 在编程中我们经常使用强制类型转换,尤其是在竞赛中int不够的时候 static_cast和它差不多,只是能够让人们 更清晰地识别出它是一个强制类型转换 。 类中的类型转换: 这段代码中,使用了转型动作,我们所预期的
阅读全文
摘要:以独立的语句将newed对象置入智能指针: 我们在这使用对象管理式资源,却可能造成资源的泄露。 上面主要有3三件事情需要完成: priority() new Widget share_ptr的构造函数 但是在C++中无法确定他们的调用顺序,于是可能出现下面这种: new Widget priorit
阅读全文
摘要:静态内存:用来保存static 栈内存:保存非static 智能指针: shared_ptr:允许多个指针指向一个对象 unique_ptr:独占所指对象 weak_ptr:一种弱引用,指向shared_ptr的对象 shared_ptr: 拷贝会使shared_ptr的计数器增加.初始化,函数参数
阅读全文
摘要:我们在创建类的对象时,类不应该仅仅被声明,还应该被定义过,否则无法知道类占用了多少的内存 但是如果一个类的名字已经出现过就被认为是已经声明过了,所以允许包含自己的指针或者引用。 默认构造函数: 当类中包含一个其他类的成员且它没有默认构造函数,那个编译器无法为当前类合成默认构造函数。 如果不支持内类初
阅读全文
摘要:编译器能以任意顺序对形参进行求值 函数的返回类型不能是数组类型和函数类型。 函数开始时为形参分配内存,一旦函数结束,形参也就被销毁了。 如果弄成静态局部变量,那么回到程序终止结束时才被销毁。 形参类型决定了形参与实参的交互方式 使用引用避免拷贝: 拷贝大的类类型或者容器的对象比较低效,甚至有的类类型
阅读全文
摘要:无符号之间的运算 当一个是无符号类型,另外一个是带符号类型: 如果无符号不小于带符号,那么带符号转换成无符号。 如果无符号小于带符号,当无符号类型的所有值都能存到带符号中时,则无符号转换成带符号,否则, 带符号类型转换成无符号类型。 比如: 有两个类型分别是 long 和 unsigned int,
阅读全文
摘要:定义: 左值:用的是对象的身份 右值:用的是对象的值(内存) decltype: <!--more--> 当其作用于表达式时,如果求值结果是左值,那么返回一个引用 如果求值结果是右值,那么返回正常 int*p; decltype(*p); //解引用运算生成左值,所以结果是int& decltype
阅读全文
摘要:定义: 主要是求值顺序的问题 int i = f1() + f2(); //我们无法知道是f1 还是 f2先被调用 而且求值顺序和优先级和结合律无关,比如: f() + g()*h() + j() 优先级:g()的返回值和h()的返回值相乘。 但是并没确定调用顺序 for(auto it = beg
阅读全文
摘要:Const int size = 512; 在编译的时候,编译器会把用到该变量的地方全部替换成对应的值。 const&可以绑定字面值,所以当用常量引用绑定一个常量时,是否可以看成那个值在编译阶段已经被替换了 如果程序有多个文件,则用了const对象的文件必须要能访问到const的初始值才行,所以每个
阅读全文
摘要:前缀递增和后缀递增 class NewInt { public: NewInt():RootInt(0){}; NewInt(int IniInt):RootInt(IniInt){}; NewInt& operator++() { cout<<"prefix"<<endl; this->RootI
阅读全文

浙公网安备 33010602011771号