Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41621
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 52
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-18 21:17
文章分类

全部博文(5)

文章存档

2016年(3)

2013年(2)

我的朋友

分类: C/C++

2016-03-14 16:32:08

Class with pointer 成员变量包含指针的类的设计

Big three(必须要考虑的问题):
1.拷贝构造函数
2.拷贝赋值函数
     a.要释放原有类中的指针所指空间
     b.由上面a所引发的自我赋值的问题

3.析构函数
     a.new的底层:malloc->类型转换(指针类型变换)->Constructor
     b.delete底层:Destructor->free。默认的析构函数只会释放定义的变量,但是如果变量是指针,那么是不会释放指针变量指向的空间。因此需要手动写析构函数来释放指针变量指向的空间。new p[]; delete[] p; arrary new需要匹配array delete。


Class with pointer的类重点在于浅复制还是深复制。
默认的拷贝构造函数是浅复制的。构造函数要实现深复制,就需要自己写拷贝构造函数和拷贝赋值函数。


进程内存结构以及变量作用域的问题

从低地址到高地址:text,data(已被初始化的全局变量和静态变量),bss(未被初始化的全局变量或静态变量),heap,未用内存,stack


local(auto) object问题:
函数是放在stack空间中,形成stack frame.一层一层叠加。当函数返回时unwind stack,所以函数返回时内存会被释放,原有在函数中定义的非静态变量会被destory。
因此函数返回的时候,要注意是不是local object的问题!


heap object问题
通过new(底层为malloc)创建的变量是放在heap中的,返回指针。因此对于这类的object可以进行持久保存,并且需要释放避免内存泄漏问题。


static object:
所有static变量放在data段或者bss段,因此是持久的。
所有的函数的都是全局的,包括静态函数。函数只有1份。子类继承父类对于函数部分是继承函数的调用权。
static 成员函数则是没有this指针!可以通过类名或者对象调用。


类模版

点击(此处)折叠或打开

  1. template<typename T>
  2.  Complex{
  3.     Complex(T r=0, T i=0):re(r),im(i) {}
  4.     T real() const {return this->re;}
  5.     T imag() const {return this->im;}
  6.  private:
  7.     T re,im;
  8.  }

  9. Complex a(1,2)
  10. Complex a(1.2,8.3)


函数模版 


点击(此处)折叠或打开

  1. template<class T>
  2. const T& max(const T& a, const T& b)

  3. max(1,2)
  4. max(1.3,5.4)



命名空间(namespace):避免与用户定义的名称冲突。目前使用到的是里面的std比较多.


阅读(1940) | 评论(0) | 转发(0) |
0

上一篇:第一周笔记

下一篇:第三周笔记

给主人留下些什么吧!~~