effective C++ 读书笔记(4)
1: 内置类型以外的任何 东西 其初始化责任落在构造函数上 : 确保每个构造函数都将对象的每一个成员初始化。
2:不要搞混了 赋值(assignment) 和 初始化(initiallization)
assignment 实际做了 先调用default 构造函数 在调用copy构造函数 消耗较高
3: 如果成员变量是const 或是 reference 他们只能被初始化 不能被赋值 也即是说 他们只能在成员初始化类表中被初始化
4:non-local static 对象的初始化
(1) static 对象: 从被构造出来开始 , 直到main()函数退出 后才被消亡
因此=> stack 和 heap-base 对象 都不是
global对象 定义于namespace 内对象 在class内 在函数内 在file作用域内(?) 被声明为static 的对象
2: 不同编译单元内的non-local static 对象 初始化 顺序 没有 明确规定
3: 因此采用singleton 设计模式 可以搞定 (inline 的绝佳应用)
static A* getInstance()
{
if(m_instance==NULL)
{
m_instance = new A();
}
return m_instance;
}
4: 但是这里又牵涉到多线程安全的问题
1: 在程序单线程启动的时候手动调用 该函数
2: double-lock 比较好!