effective C++ 读书笔记(5-10)
1:
C++ 不允许让reference 更改指向的对象
int main()
{
string value("wangshuai");
string &a = value;
cout<<&a<<endl;
string minhua("wuawuawua");
a = minhua;
cout<<&a<<endl;
cout<<value<<endl;
cout<<minhua<<endl;
return 0;
}
输出结果:
0x22ff04
0x22ff04
wuawuawua
wuawuawua
2: 父类将其cpoy构造函数 assign构造函数声明为private 的
则编译器拒绝为其子类声明默认的copy& assign构造函数
3: 将成员函数声明为private 而故意不去实现他们!
一个小trick 可以阻止 member 函数 friend函数 等其它函数调用它们
在link的时候出错
4: priavte继承
不管是什么继承,子类中都可以访问父类中所有public和protected的成员。
private继承只是表明继承关系是private的,而不表明所有成员的访问权限也是private的,这完全是两码事。
讲得通俗点,private继承是指“外界”不知道那个类还有个父类,而不是子类自己也不知道他有个父类。就像私有成员一样,外界不知道类有私有成员,不代表类自己也不了解自己的私有成员。
5:
C++明白指出,当派生类的对象经由一个base class 指针删除,而该base class带着一个non-virtual 的析构函数 其结果没有定义
通常是 她的派生成分没有被删除
这造成了 “局部销毁” =》 资源泄露 破坏堆栈
6:
切记 不要继承 STL中的类 std::string 等等
因为他们的析构函数是非虚的
不过这种情况是可以编译过的。。。 C++没有提供类似于Java(final classes) 或C#(sealed classed )这种机制
7:
pure virtual 函数导致abstract classes 该类不能被实例化
class pured
{
public:
pured(){};
virtual ~pured()=0;
};