1.
构造函数
不管子类有没有定义构造函数时,都会默认调用父类的构造函数
拷贝构造函数
如果子类没有定义拷贝构造,那么会默认调用父类的
如果子类定义了拷贝构造,那么不会默认调用父类,必须自己显式调用
这也就是为什么如果子类自己定义了拷贝构造函数,即使继承自 boost::noncopyable,仍然可以拷贝的道理了
以下代码编译OK
class B: boost::noncopyable
{
public:
B(){}
B(const B&){
}
};
int main()
{
B b;
B b2(b);
return 0;
}
2.
模板一般定义要放在头文件里,否则编译错误
其实模板也可以声明在h里,实现在cpp里,但是前提是在cpp里要实现化它
比如,在h里声明template<class T> void func(T&);
cpp里:
template<class T> void func(T&){}
template void func(int &);
以后客户使用h的时候就不会报错
注:
或者写一个模板特化
template<> void func(int&){}