摘要:
对象数组的构造:对象数据的构造一般有两种方式:静态和动态(1)静态分配 以string类为例,string a[10];就是以静态形式构造数据,这样的数组的个数是确定的不能修改的。 像这样的数组怎么进行构造和析构呢? 编译器在构造数组的时候会生成一个使用默认构造函数的数组构造函数arr_new(char *p,sizeof(string),int num,构造函数地址,析构函数地址);同样也会生成数组析构函数,形式类似。arr_del(char *p,sizeof(string),int num,析构函数地址); 若数组构造中间出现异常,该函数必须保证已构造的对象析构,然后释放内存。 ... 阅读全文
摘要:
虚拟继承下的对象构造:由于虚拟基类对象在子类中只能保持一个实例,那么,子类构造的时候调用父类的构造函数的时候必须保证虚拟基类对象不能够重复构造。那么,C++规定虚拟基类对象的构造只能是最外层的子类进行构造,浅层次的子类将不会在进行构造,保证了虚拟基类对象的唯一性。在虚拟继承体系下,子类的构造函数中必须做一个判断,设置一个标准位,用来判断虚拟基类对象是否已经构建,然后将该标志为传递给浅层次的子类,那么虚拟基类将不会再次构造。例如,编译器会为子类构造函数内部设置标志位Point3D::Point3D(Point3D *this,bool _most_derived){ if(_most_deri. 阅读全文