Boolan-C++面向对象高级编程(下)第二周笔记

1. const


上表中:由于成员函数的const和非const同时存在,const对象只能调用const成员函数,非const对象只能调用非const成员函数。因此√(×)表示, 编译器可以通过,但不会执行。

例如:

Class

template std::basic_<……>

{

Public:charT operator[](size_type pos )const  { //不必考虑COW};

       Reference operator[](size_type pos ) {//必须考虑COW};

}

COW:copy on write

2. new和delete

2.1编译器内部转化

2.1.1编译器内部对于new操作符的转换:

比如:创建一个complex指针pc;

Void* mem = operator new ( sizeof ( complex ) ); //相当于调用malloc(n)

 Pc = static_cast < complex * >( mem);   //static_cast转型操作

Pc->complex:: complex( 1, 2 );      //调用构造函数(成员函数)complex ::


2.1.2编译器内部对于delete操作符的转换:

比如:delete一个string对象

String::~String(ps);

Operatordelete(ps);


2.1.3Array new 和array delete

比如:

String*p = new String[3];

……

Delete[]p;


注意,数组在delete时,后面的“[]”一定不能少,否则会导致内存泄露。

2.2全局new和delete函数的重载

一共分为四类:::operatornew ;::operator delete ;::operator new[]  ; ::operator delete[]

注意,4者不能被声明与同一个namespace


2.3成员new和delete函数的重载

inlinevoid* operator new(size_t size)

{cout<<”jjhou  gobal new() \n”; return  myAlloc(size);}

类中对new操作的重载:

ClassFoo

{

  Public:

       Void* operator new(size_t);

       Void operator delete(void* , size_t); //第二参数可以不用写

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容