基类指针指向派生类,为什么基类的析构函数声明为虚函数后,delete基类指针后会调用到派生类的析构函数,基类的指针不是只指向派生类中继承的基类的部分吗,派生类的析构函数又不在那部分啊

基类指针指向派生类,为什么基类的析构函数声明为虚函数后,delete基类指针后会调用到派生类的析构函数,基类的指针不是只指向派生类中继承的基类的部分吗,派生类的析构函数又不在那部分啊

这个调用,说的是编译器的自动调用,不是手工的调用

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/187454
  • 这篇博客也不错, 你可以看下用于调用的参数太少/写入位置时发生冲突/检测到无效的异常处理程序例程
  • 除此之外, 这篇博客: 遗传算法C语言实现以及思路详解简单易懂中的 7.生殖、变异(更改部分二进制位,取反部分二进制位,可能生成误差更小的答案) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    void crossover_and_variation(){//生殖交叉、变异 
    	for(int k=0; k<animal_num; k++){
    		
    		int father[DNA_bit * DNA_num];
    		int mother[DNA_bit * DNA_num]; 
    		int child[DNA_bit * DNA_num];
    		int father_id = rand() % 200;
    		int mother_id = rand() % 200;
    		for(int i=0; i<DNA_bit * DNA_num; i++){
    			father[i] = animal[father_id].DNA[i];
    			mother[i] = animal[mother_id].DNA[i]; 
    		}
    		
    		if((rand()%100)/100.0 < cross_rate){
    			int cross_pos = rand() % (DNA_bit * DNA_num);
    			for(int i=0; i<cross_pos; i++)child[i] = father[i];
    			for(int i=cross_pos; i<DNA_bit * DNA_num; i++)child[i] = mother[i];
    		}
    		
    		if((rand()%100)/100.0 < variation_rate){
    			int variation_pos = rand() % (DNA_bit * DNA_num);
    			child[variation_pos] = 1 - child[variation_pos];
    		}
    			
    		
    		for(int j=0; j<DNA_bit * DNA_num; j++){
    			selected_animal[k].DNA[j] = child[j];
    		}
    		
    	}
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^