Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类的字段何时调用解构器?_C++_C++11 - Fatal编程技术网

C++ 类的字段何时调用解构器?

C++ 类的字段何时调用解构器?,c++,c++11,C++,C++11,假设我有一门课: class Test{ public: std::vector<int*> foo; Test(){ int * x = new int(5); int * y = new int(10); foo.push_back(x); foo.push_back(y); } ~Test(){ for(int i = 0; i < foo.size(); i++){ delete foo.at(i);

假设我有一门课:

class Test{
public:
    std::vector<int*> foo;
Test(){
    int * x = new int(5);
    int * y = new int(10);
    foo.push_back(x);
    foo.push_back(y);
}
~Test(){

    for(int i = 0; i < foo.size(); i++){
        delete foo.at(i);
    }
}
void reAssignTest(){
    Test test2;
    *this = test2;
}
};

int main(){
    Test test;
}

我注意到解构器中的for循环从未运行b/c,当解构器在我的原始“test”实例被test2替换后被调用时,foo的大小为0。因此堆中的int变量永远不会被销毁。这是因为向量的解构器在我的解构器中的代码运行之前被调用了吗?

事实证明,您的构造函数也没有被调用。这是因为线路测试;在main中声明了一个方法测试,它接受输入void并返回一个test类型的对象。只要用Test Test{}替换Test Test,这个问题就会消失


阅读最烦人的解析,或者寻找stackoverflow的其他答案。请参见

阅读。测试;应进行测试;对不起,我不是故意要考试的;我现在编辑测试;这个问题仍然存在于解构主义者身上。我正在使用Clion和valgrind检测内存泄漏。问题在于您的重新分配测试方法。假设您在测试实例上调用该方法。您的*this=test2只会生成成员向量foo的浅拷贝。这意味着存储在*中的原始指针现在泄漏。试着评论一下这个方法,看看CLion是否还在抱怨。