自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

转载 如何限制对象在栈或堆中创建对象

昨天一个同学去网易面试C++研发,问到了这么一个问题:如何限制一个类对象只在栈(堆)上分配空间?一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类。这能不能实现呢?仔细想想,其实也是可以滴。在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。1、静态建立类对象:是由

2017-09-14 09:29:37 513

原创 堆,栈

栈,堆的一些区别.栈区效率比堆区高,malloc,calloc,realloc,new等分配的空间在堆区,临时变量分配在栈区。   区别是:栈区由电脑自己清除(用完自动删),堆区需要程序员清除,或者程序结束后由系统清除.栈一般能放2M大小使用动态内存分配,使用完未删除就会造成泄漏。或者是如果没有任何一个指针指向那块动态内存,那它就泄漏了.堆区和栈区都不会自动初始化,自动初始化会在未赋值的静

2017-09-10 10:23:42 337

原创 重载, 覆盖,隐藏

a.函数被重载的特征: (1)相同的范围(在同一个 作用域中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 b.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual 关键字。 c.“隐藏”是指派生类的函数屏蔽了与其

2017-09-10 10:20:45 230

原创 静态的使用方法

静态的使用注意事项: 1.静态方法只能访问静态成员(包括成员变量和成员方法)    非静态方法可以访问静态也可以访问非静态 2.静态方法中不可以定义this,super关键字    因为 一个类中,一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static变量会共享同一个内存空间。静态方法在优先于对象存在,所以静态方法中不可以出现this,super

2017-09-10 10:03:56 607

转载 如何判断整型算数运算是否溢出

如何判断整型算术运算是否溢出一个算术运算溢出,是指完整的整数结果不能放到数据类型的字长限制中去。溢出的原因是显而易见的,考虑两个非负整数x和y,满足0由于溢出后的结果往往不是我们想要的结果,我们必须对溢出时的情形另做处理,但在此之前我们必须得先能够判断什么时候发生了溢出。无符号整数的溢出判断比较简单:对一个字长w的无符号数加法运算,当x+y>=2^w时,第w+1位被程序舍去,相当于

2017-09-09 21:40:01 10782 1

原创 内存分配函数

1) malloc 函数: void *malloc(unsigned int size)     在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。2)calloc 函数: void *calloc(unsigned int num, unsigned int size)     按照所给的

2017-09-09 13:27:09 375

原创 结构体大小的计算方法

根据以下条件进行计算: 1、  结构体的大小等于结构体内最大成员大小的整数倍 2、  结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相对于结构体的首地址的地址偏移量应该是8的倍数。3、  为了满足规则1和2编译器会在结构体成员之后进行字节填充!

2017-09-09 12:46:34 441

原创 关键字volatile

volatile用来声明那些可能在你的程序本身不知道的情况下会发生改变的变量。一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。对于一般变量:为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中。以后再取变量值时,

2017-09-09 09:36:38 183

原创 指定仿函数

1.作为模板类型实参的仿函数      传递仿函数的一个方法是让它的类型作为一个模板实参,传递一个该类型的仿函数对象。类型本身并不是一个仿函数,因此客户端或者客户端类都必须创建一个给定类型的仿函数对象。当前,只有class类型仿函数才能这么做,函数指针不行,而且函数指针本身也不会指定任何行为eg: template---->模板类型实参      void my_sort(...)

2017-09-08 20:58:06 244

原创 深入理解C++template的基础知识

1.参数化的声明 C++现今支持两种基本类型的模板:类模板和函数模板(也包括成员模板),这些模板的声明与普通类与普通函数的声明很相似,唯一的区别就是模板声明需要引入一个参数化的子句,子句的格式大体如下:template1.1虚成员函数              成员函数模板不能被声明为虚函数。因为虚函数调用机制的普遍实现都使用了一个大小固定的表,每个虚函数都对应表的一个入口。然

2017-09-02 13:53:09 1743

原创 声明和定义

声明:                        声明是一种C++构造,它引入(或重新引入)一个名称到某个C++作用域,有效的声明并不要求包含被引入对象的细节。eg:class C;//类C的声明void f(int p);//函数f的声明,其中p是一个被命名的参数extern int v;//变量v的声明定义        如果

2017-09-01 20:38:12 283

原创 引用类型实参和非引用类型实参对于字符串可能存在的问题

#include //注意:引用参数templateinline T const& max(T const& a, T const& b){return a }int main(){string s;::max("apple", "peach"); //OK:相同类型的实参::max("apple", "tomato"); //ERROR:不

2017-09-01 18:37:25 401

原创 零初始化

对于int,double或者指针等基本类型,并不存在“用一个有用的缺省值来对它们进行初始化“的缺省构造函数,相反,任何未被初始化的局部变量都有一个不确定的值:     void foo()     {           int x;//x具有一个不确定值           int* ptr;//ptr指向某块内存     }  现在,假如你正在编写模板,并且希望模板类型

2017-09-01 18:23:44 606

原创 重载解析

重载解析是一个过程,它根据所给定的表达式,来选择进行调用的函数。    重载解析规则的大多数概念都是很简单的,但在C++标准化过程中,一些细节会变得非常复杂。复杂性主要是为了支持现实中的一些例子。这些例子从主观上看起来应该具有“明显的最佳匹配”,但当试图形式化这种主观匹配时,却会遇到各种各样的困难。1.何时应用重载解析?    重载解析可以看成是:函数调用整个完整处理过程的一部分。

2017-09-01 09:59:24 711

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除