c++ 默认的sort排序问题,求解答
这是一个类对象排序的问题,为了验证我的类以及排序没问题,我先把问题点注释运行。

运行结果:

结果没问题,现在我取消24,26,27行的注释(不取消25行),这是一个类的析构函数。

运行sort函数,对用了一堆的类析构函数然后排序。如果我在类的析构函数中释放指针,取消注释25行。结构如下:

代码
#include<iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
int random(int mi,int ma){
return rand()%(ma-mi+1)+mi;
}
struct A{
int b;
};
bool op(A a,A b){
return a.b<b.b;
}
class Stu{
public:
int b;
int *c;
Stu(){
b=random(0,100);
c=new int;
*c=random(0,100);
}
~Stu(){
delete c;
cout<<"析构"<<endl;
}
};
bool op2(Stu a,Stu b){
return a.b<b.b;
}
//bool op3(Stu a,Stu b){
// return a.a[0].b<b.a[0].b;
//}
bool op4(Stu a,Stu b){
return *(a.c)<*(b.c);
}
int main(){
srand(time(NULL));
//A *a=new A[10];
Stu *s=new Stu();
Stu *a=new Stu[10];
//for(int i=0;i<10;i++) cout<<*(a[i].c)<<" ";
//cout<<endl;
for(int i=0;i<10;i++) cout<<a[i].b<<" ";
//for(int i=0;i<10;i++) cout<<*(a[i].c)<<" ";
cout<<endl;
sort(a,a+10,op2);
for(int i=0;i<10;i++) cout<<a[i].b<<" ";
//for(int i=0;i<10;i++) cout<<*(a[i].c)<<" ";
cout<<endl;
return 0;
}
运行结果及报错内容
0 0 52 8 78 0 15 81 23 30
析构
析构
free(): double free detected in tcache 2
已放弃 (核心已转储)
问题就这样子了。
求解。问题:1.为什么sort会调用类的析构函数 2.如何去用sort排序含有析构对象的呢?