GeekBand class2

1.在具有指针的类中,必须具有拷贝函数、拷贝赋值函数、析构函数这三种内容,其实现形式如下:

#ifndef _MYSTRING_#define _MYSTRING_#includeclass String{

private:

char* m_data;

public:

String(const char* cstr=0); //default构造函数

String(const String& str); //拷贝构造函数

String& operator=(const String&str); //拷贝赋值函数

~String(); //析构函数

char* get_c_str()const{return m_data;}

};

inline String::String(const char* cstr){   

if(cstr){

m_data=new char[strlen(cstr)+1];

strcpy(m_data,cstr);

}

else{

m_data=new char[1];

*m_data='\0';

}

}

inline String::~String(){

delete[]m_data;

}

inline String::String(const String& str){

delete[]m_data;

m_data=new char[strlen(str.m_data)+1];

strcpy(m_data,str.m_data);

}

inline String& String::operator=(const String& str){

if(this==&str)return *this;

delete[]m_data;       //self assignment

m_data=new char[strlen(str.m_data)+1];

strcpy(m_data,str.m_data);

return *this;

}

#endif

C++中申请和释放动态内存相对应的操作符为new delete,new先分配内存空间再实施构造函数,delete先实施析构函数再释放内存空间。


self assighment的作用:当左右指针指向同一个内存空间时,若此时没有self assighment
,则会产生不确定行为。


2.全局输出函数构造:

#include<iostream>

ostream& operator<<(ostream& os,const String& str){

os<<str.get_c_str():

return os;}


3.内存空间模式有stack和heap两种。其中stack是存在于某一作用域的一块内存空间,当你调用函数时,就会生成一个stack空间来存放接受的参数及返回地址。heap是由操作系统提供的一块全局内存空间,new操作符申请到的内存空间就是已heap方式分配而来的。

stack内存空间在函数结束时会自动清除,即stack的生命期在作用域结束后自动清除,而heap内存空间在他被delete之前会一直存在,为了避免出现内存泄漏,在函数中由new申请的动态内存要在函数结束时使用delete释放掉。

如想使stack object具有全局的生命期,可以在对象前加上static。

面对字符串申请内存空间时,要申请字符串长度+1的空间。(空字符串要由一个空间来存放结束符号‘\0’)

complex*pc=new complex(1,2);

编译器转化为:

void*element=operator new(sizeof(complex));

pc=static_cast<complex*>(element);

pc->complex::comliex(1,2);

delete pc;

编译器转化为:

complex::~complex(pc);

operator delete(pc);

系统一次从heap中申请到的内存空间必为8n字节

4.array new 需要由array delete来清除

String*p=new String[3];

delete[]p//唤起三次dtor

String* p=new String[3];

delete p;//唤起1次dtor,两份内存没有析构,内存泄露

int*a=new int[3];

delete a;//可行,对象的类型时内置类型或者是无自定义析构函数的类型

5.static 静态函数只能对静态数据进行处理

构造函数在private区的类:singleton

class singleton{

public:

static A& getIn();

setup(){...}

private:

A();

A(const A& a);};

inline A& A::getIn(){

static A a;

return a;}

6.类模板和函数模板

class template:

template<typename T>

class A{

private:

T re,im;friend A& _doapl(A*,const A&);

public:

A(T a=0,T b=0):re(a),im(b){};

A&operator+=(const A&);

T real()const{return re;}

T imag()const{return im;}};

function template

template<typename T>

inline T& min(const T& a,const T& b){

return a<b?a:b}//编译器会对函数进行引数推导,调用相应对象中的重载函数

7.三种类于类的关系

Composition:

template<typename T>

class A{

....

protected:

B<T> b;//底层容器

public:

bool empty()const{return b.empty();}//利用b的操作函数完成

};

A::A(..):B(){..}  A的构造函数首先调用B的default构造函数,由内而外

A::~A(...){...~B()} A的析构函数先调用,然后才调用B的析构函数 由外而内

Delegation:Composition by reference

Inheritance:

class A;

class B:public A{.....};

构造由内而外,析构由外而内。

父类与子类同时具有的函数必须为虚函数以便该函数在子类中可以重新构造

virtual function:

class A{ virtual x() const=0;//纯虚

virtual y();//虚}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容