C/C++
文章平均质量分 73
nxtgo
这个作者很懒,什么都没留下…
展开
-
【初级】C++中的拷贝构造函数
下面的代码哪里有问题? class Base { public: Base(int k) { i = 0; printf("Base()\n"); } Base(const Base & base) : i(base.i) { printf("Base copy.\n"); } void print() {printf("%d\n",原创 2013-09-06 14:42:58 · 937 阅读 · 0 评论 -
【初级】C++中子类对象转型为父类对象时,编译器默默做了什么?
被问及C++中将子类对象转型为父类对象时,会发生什么?大部分人可能会回答说:子类成份会被"阉割",也就是说它不再具有子类特性。确实是这样,不过我想知道编译器是怎么处理“阉割”的。请看如下代码, Child chd; Base b0(chd); Base b1 = chd; Base b2; b2 = chd; 很明显,b0和b1都是通过调用Base的拷贝构造函数来完成构建的。对于b2,编译原创 2013-09-06 15:51:08 · 1753 阅读 · 0 评论 -
【中级】C++析构函数抛出异常
C++标准指出不能在析构函数里面抛出异常!理由呢? 理由一:可能造成资源泄露! 请看如下代码: #include class A { public: ~A() { printf("~A()\n"); } }; class SuperBase { public: ~SuperBase() { printf("~SuperBase()\n"); } }; class原创 2013-09-06 22:19:21 · 1174 阅读 · 0 评论 -
【中级】C++构造函数抛出异常
C++标准并未提到在构造函数中不能抛出异常,但是在构造函数中抛出异常确实有些问题需要注意,请看下面的代码: class A { public: ~A() { printf("~A()\n"); } }; class Base { public: Base() { printf("Base()\n"); pi = new int; throw 0; }原创 2013-09-06 20:43:13 · 1053 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(转载 2013-09-27 14:00:50 · 839 阅读 · 0 评论 -
c++模板特化
一、模板特化, specialization of template 模板特化(specialization of template)并不是说实例化一个模板,如template ,class stack;声明stack,这是实例化一个模板类。类模板特化的意思是,对于某个特定的类型,需要对模板进行特殊化,即特殊的处理。例如,stack类模板针对bool类型有特化,因为实际上bool类型只需要一个二转载 2013-09-27 15:40:29 · 882 阅读 · 0 评论