class Parent
{
public:
Parent();
}
template<typename T>
class Child : public Parent
{
public:
Child();
Child(const Parent& p);
Child(const Child& C);
}
int main()
{
Child<int> C1;
Child<int> C2(C1);
Child<float> C3(C1);
return 0;
}
注意 C3 会调用C1的 父类拷贝构造函数。
而C2 会调用C1的 子类拷贝构造函数。
如果在Child类中未重写 子类拷贝构造函数。
那么编译器会调用默认的子类拷贝构造函数,并且如果Child内中存在指针成员变量,那么C1和C2的指针变量将共享C1的成员指针所指向的地址。
这会导致在程序结束,析构对象释放C1指针new出来的内存时,出现重复释放一块内存的严重错误。