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); //第二参数可以不用写

}

你可能感兴趣的:(Boolan-C++面向对象高级编程(下)第二周笔记)