学习总结:拷贝构造函数、常量折叠、堆\栈

一、关于拷贝构造函数

1、相同类型的类对象是通过拷贝构造函数来完成整个复制过程的;

2、拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量;

3、三种情况下会调用拷贝构造函数:对象以值传递的方式传入函数参数、对象以值传递的方式从函数返回、对象需要通过另外一个对象进行初始化;

相关博文:

http://blog.csdn.net/lwbeyond/article/details/6202256

二、常量折叠

1、编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表;

2、const定义的变量a=10,编译时会进行优化,即只要代码中遇到这个变量a,就会从常量表中找到对应的那个常量10来替换这个变量a,相当于宏定义;

3、所以就算我们把存储const变量a的内存内容改了,改成了20,打印变量a时仍然是打印出10.

三、C/C++中堆和栈的理解

1、C++程序内存分为6个区:

(1)栈区——由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

(2)堆区——(new/delete)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。

(3)全局/静态区——全局变量和静态变量被分配到同一块内存中。

(4)自由存储区——由malloc等分配的内存块,他和堆是十分相似的, 不过它是用free来结束自己的生命的。

(5) 常量存储区——这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。程序结束后由系统释放。

(6)程序代码区—— 存放函数体的二进制代码。

相关博文:

http://www.cnblogs.com/likwo/archive/2010/12/20/1911026.html

http://blog.csdn.net/nieyibin/article/details/7468323

时间: 2024-11-05 20:39:32

学习总结:拷贝构造函数、常量折叠、堆\栈的相关文章

C++学习之拷贝构造函数

嘛是拷贝构造函数? 如果一个构造函数的第一个参数是’自身类‘ ‘类型’的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数.如: [代码1] 1 2 3 4 5 6 class A{ public:    A();         //默认构造函数    A(const A&); //拷贝构造函数:const可省略,但此参数几乎总是一个const的引用!    //其他内容 } 拷贝构造函数会被隐式地使用,所以不应该定义成explicit的(explicit构造函数将限制隐式转换,只能以

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员)、拷贝构造函数

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员).拷贝构造函数  从概念上将,可以认为构造函数分为两个阶段执行: 1)初始化阶段: 2)普通的计算阶段.计算阶段由构造函数函数体中的所有语句组成. 一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 1.对象成员及其初始化 <span style="font-size:14px;">#include <iostream> using namespace std;

C++学习之构造函数、拷贝构造函数

引申问题一:拷贝构造函数中参数是否加const对拷贝构造函数的影响. 网上大多数人对于这个问题的解释只能达到"当你不想对参数进行修改时,就需要加上const关键字"的程度,但是并没有仔细区分这两种情况到底有什么区别.以下面的程序为例: Dog.h #ifndef __test_header__Dog__ #define __test_header__Dog__ #include <stdio.h> class Dog{ public: Dog(); Dog(Dog &

C++ Primer Plus学习笔记之拷贝构造函数

C++ Primer Plus学习笔记之拷贝构造函数 1,什么是拷贝构造函数 拷贝构造函数有两个含义: 首先,它是一个构造函数,当创建一个新对象时,系统自动调用它: 其次,它将一个已经定义过的对象的数据成员逐一对应的复制给新对象: 如果一个类没有显式定义拷贝构造函数,C++编译器可以为该类产生一个缺省的拷贝构造函数.这个缺省的拷贝构造函数采用C的方式,将拷贝对象的内存一个字节一个字节的拷贝到拷贝对象的内存中(内存拷贝): 2,拷贝构造函数的作用 (1)创建一个新对象,并将一个已存在的对象拷贝到这

【转】 c++拷贝构造函数(深拷贝,浅拷贝)详解

c++拷贝构造函数(深拷贝,浅拷贝)详解 2013-11-05 20:30:29 分类: C/C++ 原文地址:http://blog.chinaunix.net/uid-28977986-id-3977861.html 一.什么是拷贝构造函数      首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.  下面看一个类对象拷贝的简单例子. #include<iostream

c++拷贝构造函数(深拷贝,浅拷贝)详解

一.什么是拷贝构造函数      首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.  下面看一个类对象拷贝的简单例子. #include<iostream> using namespace std; class CExample { private: int a; public: //构造函数 CExample(int b) { a=b; printf("con

深度解析C++拷贝构造函数

自2003年开始,断断续续用了12年C++,直到这两年做物联网嵌入式开发,感觉对C++的掌握仅有10%左右.习惯了C#开发,C++倒显得难以下手!今天就一个函数返回问题跟辉月兄弟讨论一番,大有所获,足以解决我们目前80%的问题,感觉对C++的掌握上升到了20%. 背景,现有字节数组ByteArray和字符串String,(不要激动,单片机嵌入式C++很难用起来标准类库)我们需要实现函数String& ByteArray::ToHex()其实这是我们在C#上非常常用的函数,把一个字节数组转为字符串

C++类对象的复制-拷贝构造函数

在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如: #include <iostream>  using namespace std;    class Test  {  public:      Test(int temp)      {          p1=temp;      }  prote

【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy

1.构造函数 类的初始化即为构造函数.也为:隐式的初始化. 构造函数在对象初始化的时候,自动被调用.隐式的调用. 构造函数分为三种:有参构造函数.无参构造函数.拷贝构造函数. 有参构造函数调用有三种:括号法.等号法.手工法. #include <iostream> using namespace std; class Test { private: int m_a; public: Test()//无参构造函数 { } Test(const Test &obj)//拷贝构造函数 { }