C ++还有另一个内存泄漏问题

时间:2015-07-21 17:54:47

标签: c++ memory-leaks

如果我有以下课程:

class SimpleContainer {
private:
    std::vector<int> vec_;

public:
    void set_vec(std::vector<int>* vec) { 
        vec_ = *vec;
    }

    SimpleContainer(){}
    ~SimpleContainer(){}
};

然后执行以下操作:

int main() {
    std::vector<int>* vec = new std::vector<int>();
    SimpleContainer* sc = new SimpleContainer();
    sc->set_vec(vec);

    delete sc;
}

vec是否泄露?还是由SimpleContainer的析构函数自动清理?假设我只调用一次set_vec。

1 个答案:

答案 0 :(得分:4)

  

vec是否泄露?

是。您的代码中只有delete的调用(对于vector<int>*)。每个new都需要与delete配对。

实际上没有理由在这里有任何指示。可以通过以下方式完成相同的行为:

void set_vec(const std::vector<int>& vec) { 
    vec_ = vec;
}

SimpleContainer sc;
sec.set_vec({});