1.关于几个地址
0xCCCCCCCC在栈上分配,但没有初始化
0xCDCDCDCD 在堆区分配,但没有初始化
0xDDDDDDDD 使用在堆上已经释放的内存
2.std::cout的重定位
std::ofstream out("cout.txt");
std::streambuf *oldbuf = std::cout.rdbuf(out.rdbuf());
3类型转化
在(effient in c++)中分俩类,一类是承袭c语言函数形式的如:
int a ;
(float)a ; float(a)
一类是c++中的类型转化
const_cast,static_cast,dynatic_cast,reiterpret_cast
在c++中建议用上面四种转化,但dynatic要慎用,它的开销太大了,将父类转化为子类时候,在知道子类类型的情况下,用static_cast替换dynatic是有效的
4,构造函数
(effient in c++)中建议构造函数这么写:
class a
{
int aa ;
public
a(int b):aa(b){}
};
这样的构造函数一它是inline的,二它省掉了一个赋值操作,但inline可以会导致代码膨胀,我们知道一旦a类构造函数会调用它父类的构造函数,也会调用它的member的构造函数,这样可能导致构造函数代码膨胀导致换页
5异常安全函数
异常安全函数应该提供的保证:
基本保证:让异常前的状态保持某中特定的状态
强制保证:一旦有异常抛出,状态恢复到以前的状态
异常不抛出保证
异常安全函数一般要求达到强制保证,这个可以用copy and swap实现:
肚子饿了,吃饭去了,以后写