C++析构和构造函数

类的代码


class Object {
public:
    Object(int i) {
        id = i;
        count++;
        cout<<"Object "<<id<<" is created, we've got "<<count<<" object(s) now!"<<endl;
    }
    ~Object() {
        count--;
        cout<<"Object "<<id<<" is deleted, we've got "<<count<<" object(s) now!"<<endl;
    }
private:
    int id;
    static int count;
};

后面说的奇偶数对应图片每行的第一个数字
题目要求是编写一个函数,我输入一个数字,(题目给了这里的代码)先整体按顺序打印输出构造函数的部分,再打印输出奇数的析构函数,再到偶数的析构函数,具体见图

void TestObjects(int num)
 {
    vector<Object*> objects;
    for (int i = 1;i <= num; i++)
        objects.push_back(new Object(i)); // 调用构造函数
    for (int i = 0; i <num; i++){
         if(i%2==0){
            delete objects[i]; // 调用析构函数    
        }
    }
    for(int i=1;i<=num;++i){
        if(i%2==1){
            delete objects[i];
        }
    }    
        
 }


我的下面的代码可以实现这个输出,但是它没有通过内存检查,所以应该还是有问题的,而且我的问题还有就是为什么我释放那里的判断为奇数时,对应打印的却是偶数

img

std::vector的下标是从0开始的。你这样的话,object[n]对应的id是n+1,所以导致奇数偶数正好相反。还有,你这样很危险,第11行会下标越界