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