类的字段何时调用其解构函数?

时间:2019-03-10 04:53:36

标签: 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);
    }
}
void reAssignTest(){
    Test test2;
    *this = test2;
}
};

int main(){
    Test test;
}

我注意到我的解构函数中的for循环从不运行b / c,一旦解构函数被调用,一旦我的原始“ test”实例被test2替换,foo的大小就是0。因此,堆中的int变量永远不会被破坏。这是因为向量在我的析构函数中的代码运行之前调用了其析构函数吗?

1 个答案:

答案 0 :(得分:1)

事实证明,您的构造函数也没有被调用。这是因为main()中的行 Container( color: Colors.white, // or any color that matches your background child: TextFormField( decoration: InputDecoration.collapsed(), validator: (input) => input == "" ? 'The task is empty' : null, onSaved: (input) => task = input, ) ), 声明了方法Test test();,该方法将输入void并返回类型为test的对象。只要将Test替换为Test test()

,该问题就会消失。

阅读“最令人烦恼的分析”或在stackoverflow上寻求其他答案。参见My attempt at value initialization is interpreted as a function declaration, and why doesn't A a(()); solve it?